Обновить
128K+

PHP *

Скриптовый язык общего назначения

97,89
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

PHPUnit: Mock объекты

Время на прочтение7 мин
Охват и читатели97K
Довольно часто при написании модульных тестов нам приходится сталкиваться с тем, что тестируемый класс зависит от данных из внешних источников, состояние которых мы не можем контролировать. К таким источникам можно отнести далеко расположенную общедоступную базу данных или службу, датчик какого-нибудь физического процесса и пр. Либо нам необходимо убедиться, что некие действия выполняются в строго определенном порядке. В этих случаях к нам на помощь приходят Mock объекты (mock в переводе с английского — пародия), позволяя тестировать классы в изоляции от внешних зависимостей. Использованию Mock объектов в PHPUnit посвящается эта статья.
Читать дальше →

php и nodejs, разница на пальцах

Время на прочтение3 мин
Охват и читатели65K
Являясь постоянным пользователем форума nodejs.ru, часто наблюдаю картину когда люди начиная изучать nodejs сравнивают ее с php, а иногда пытаются работать с ней так как с php. Я бы хотел объяснить “на пальцах” разницу между php и nodejs применительно к работе сайта. Статья предназначена для новичков. Я намеренно буду говорить очень упрощенно, не вдаваясь в глубокие подробности, что бы как можно проще показать различия в технологиях.
Читать дальше →

Честная генерация DOCX файлов на PHP. Часть 2

Время на прочтение7 мин
Охват и читатели30K
image Здравствуйте, уважаемое хабрасообщество!
Продолжаем историю про генерацию DOCX средствами PHP.

Что нас ждет сегодня:
  • Мы узнаем, как вставлять изображения в документ;
  • Просветимся на счет English Metric Units;
  • Сделаем задел на будущую генерацию Exel.

Тем, кто не в курсе, рекомендуется прочитать первую часть. Ну а кто в теме – прошу под кат
Читать дальше →

Немного о хэшах и безопасном хранении паролей

Время на прочтение4 мин
Охват и читатели74K
Upd. Если вы знаете, что такое BCrypt, можете дальше не читать. Если вы используете PHP 5.5+ то можете прочитать эту статью. Ниже же я изобрел свой велосипед, рабочий, но с двумя рулями, задний запасной. Молод был, горяч.

Привет, хабр! Сегодня, в процессе разработки системы аутентификации для своего проекта передо мной встал выбор — в каком виде хранить пароли пользователей в базе данных? В голову приходит множество вариантов. Самые очевидные:

  • Хранить пароли в БД в открытом виде.
  • Использовать обычные хэши crc32, md5, sha1
  • Использовать функцию crypt()
  • Использовать статическую «соль», конструкции вида md5(md5($pass))
  • Использовать уникальную «соль» для каждого пользователя.

Читать дальше →

Пишем простенький веб-эмулятор терминала на PHP

Время на прочтение6 мин
Охват и читатели19K
Я думаю, очень много людей думало над тем, чтобы сделать свой эмулятор терминала на PHP, и обычно останавливались на решениях вроде следующего:
<?php echo '<form><input name="cmd" /></form>'; if(isset($_GET['cmd'])) system($_GET['cmd']);

Конечно же, такое решение вызывает целый набор проблем, самая незначительная из которых — это то, что ошибки на экран не попадают. Есть и намного более значительные вещи, например запуск vi просто «подвесит» выполнение команды и придется открывать новую консоль и писать killall vi. И что уж точно не получится сделать, так это выполнить команды ssh или sudo, которые требуют чтения пароля прямо с терминала. Я постараюсь показать способ, с помощью которого можно устранить большую часть описанных выше проблем.
Читать дальше →

Рисуем код из «Матрицы» на PHP

Время на прочтение5 мин
Охват и читатели15K
Однажды мне пришла в голову идея сделать динамически создаваемый фон для блога в виде пресловутого кода из фильма «Матрица». После убийства вечера и половины ночи я-таки достиг желаемого результата, и решил поделиться им с народом. К сожалению, я не нашёл подобной реализации, а иметь динамически создаваемую «матрицу» как фон бложика таки хочется.
Итак, пишем генератор кода «Матрицы» на PHP с использованием библиотеки gd.
Читать дальше →

PHP Unit. Опыт тестирования классов, работающих с Базой Данных

Время на прочтение7 мин
Охват и читатели16K
Тестировать или нет классы, взаимодействующие с Базой данных — вопрос куда более холиварный, чем спор «покрывать код тестами или нет». Просмотрев свой проект, нам стало очевидно, что львиная доля классов основана на взаимодействии с базой данных. Поэтому было однозначно решено: «тестированию быть».
Далее я хочу поделится опытом написания модульных тестов для кода, работающего с базой данных.

PHPUnit содержит расширение для тестирования базы данных. Расширение выполняет следующие функции:
  • перевод базы данных в заранее известное состояние,
  • выполнение необходимых модификаций данных,
  • проверка, что в базе данных созданы ожидаемые записи.

К сожалению в этом списке отсутствует одна очень нужная нам фича — восстановление данных в состояние, в котором они находились до тестов. Я хочу предложить 2 варианта решения этой проблемы. Так же попутно остановлюсь на проблеме внешних ключей, которая часто возникает при накатывании не полных тестовых данных на «рабочую» базу.

Итак, я предлагаю 2 варианта решения проблемы: как после проведения юнит теста вернуть базу данных в исходное состояние:
Первый путь — «Транзакционный». Суть которого сводится к выполнению всего теста в рамках одной транзакции, и последующему rollback'у транзакции.
Второй — Перед выполнением теста скопировать структуру «рабочей» базы и проводить тестирование на ней.
Читать дальше →

Возможности PHP Reflection

Время на прочтение2 мин
Охват и читатели20K
Всё написанное не претендует на идеологическую верность, не является рабочим примером контроллера и не рекомендуется для бездумного копирования 1 в 1.

Идею прописывать необходимые параметры передаваемые в URL прямо в аргументах функции я подглядел в Symfony2. Там же использовались комментарии PHPdoc для определения маршрутов.

Для примера, мы хотим видеть наш контроллер таким:
class Controller {
    /**
     * Тестовое действие
     * @a /^[0-9]+$/i
     * @b /^[0-9a-z]+$/i
     */
    function testAction ( $a, $b = 'something' ) {
        echo 'a: '.$a.', b: '.$b;
    }
}

Как это можно сделать?

Скриншоты в облаках [обновление]

Время на прочтение1 мин
Охват и читатели807
Привет хабраюзеры!image

В своей предыдущей статье про скриншоты в облаках я описал тему создания корпоративного ресурса скриншотов. В комментариях я почерпнул то, что многие используют всякого рода сервисы, у которых есть замечательно отличие: в них можно рисовать!

Так же хочу сразу отметить, что для одного человека, т.е. себя, я бы никогда и не думал выдумывать свой велосипед. В этом и смысл корпоративной тулзы — использовать её принято у нас в компании. В той же Jira скрины показывать, либо же клиентам отсылать.

В общем нашёл я прекрасный инструмент для рисования http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app/ — интересный мануал по рисованию в HTML5. И совместил этот инструмент с тем, что было до.
Читать дальше →

Nette PHP Framework: первое знакомство

Время на прочтение3 мин
Охват и читатели12K
Логотип фреймворка Nette Было очень приятно совершенно случайно обнаружить сайт этого фреймворка во второй половине рабочего дня. Новые фреймворки появляются редко, а тем более редко попадаются механизмы, которые нравятся с первого взгляда. На Хабре описания Nette я не нашел, поэтому поспешил поделиться своей находкой с Вами.

Во-первых, мне сразу приглянулось название. Nette. Это почти как Latte. Только Nette. Как оказалось позднее, есть и Latte — собственный встроенный подающий надежды шаблонизатор. Ого.
Читать дальше →

Наконец-то вышел php 5.4

Время на прочтение1 мин
Охват и читатели5.2K
Всем привет. Сегодня вышел долгожданный релиз php5.4. Кто еще не в курсе, этот релиз включает в себя много новых возможностей и фиксов. Среди нового стоит отметить:

Для пользователей php 5.3 руководство по миграции доступно здесь. Полный список изменений доступен здесь.

Релиз еще не успел попасть на все зеркала, так что качайте на оф. сайте.

P.S.: Документация на русском уже доступна, хотя и не полностью. Обновил ссылки на русскоязычные варианты.

The MicroPHP Manifesto

Время на прочтение5 мин
Охват и читатели2K
Распространенное мнение о появлении панка, состоит в том, что панк был реакцией на крайности современного рока, в частности прогрессивного рока того времени. Реальность, безусловно, намного сложнее, но я подозреваю, что доля правды в этом есть. Рок-н-ролл в поздние 60-е и 70-е, похоже, был областью “Золотых Богов”, недоступной простому смертному. Контраст между группами типа Rush и Black Flag был огромен.
Читать дальше →

Кастомизация Magento с использованием Event/Observer

Время на прочтение3 мин
Охват и читатели13K
За 2 года работы с Magento, я много раз встречал, когда изменяя какой либо модуль для своих нужд, разработчики зачастую меняют сам модуль (блок, модель, хелпер), при этом, не используя возможности предоставляемые самой Magento. Magento это продукт который очень удобен для сторонних разработчиков, в плане дополнения и изменения базовой логики, и дает большие возможности разработчикам которые внедряют эту систему.

Читать дальше →

Ближайшие события

Честная генерация DOCX на PHP. Часть 1

Время на прочтение4 мин
Охват и читатели74K
image Здравствуйте, уважаемое хабрасообщество! Как-то раз был на хабре интересный материал про генерацию doc-файлов средствами PHP. К сожалению, больше на хабре ничего на эту тему я не нашел. На тот момент я разработал собственное решение.
Оно состояло в том, чтобы генерировать .docx файлы. Аргументы были следующие:

  • На дворе 2012 год, а этот формат появился аж в 2007-м
  • Генерить .docx несомненно проще, чем .doc, поскольку .docx = .zip, а .doc — бинарный файл
  • Костыль с генерацией HTML и переименованием в doc не подойдет для более-менее уважающих себя проектов
  • С помощью приведенного ниже метода мы с легкостью сгенерируем Excel, и вообще всё что угодно.

Подробности под катом.
Читать дальше →

Автозагрузка в PHP: начали за здравие, а кончили за упокой

Время на прочтение5 мин
Охват и читатели24K

Предисловие переводчика


Данная статья является вольным переводом-пересказом поста The End of Autoloading
. Оригинальная статья не первой свежести, поэтому код приведенный в примерах может быть не актуален. В теме, которую затрагивает статья, самое главное — общий взгляд, а не конкретные примеры.

Предисловие


Автозагрузка в PHP отлично экономит время. Это позволяет писать скрипты не задумываясь о путях к библиотекам, которые вы используете. Но с приходом неймспейсов и под влиянием Java-стиля современных фреймворков ситуация изменилась. В ближайшем будущем автозагрузка будет повсеместно, но без единой выгоды старого ее стиля.
Читать дальше →

Расширяем возможности PHPMailer

Время на прочтение11 мин
Охват и читатели42K
Добрый день!
Наверное все, кому приходилось отправлять почту из кода на PHP через SMTP, знакомы с классом PHPMailer.
В статье я расскажу о том, как можно в несколько строк кода научить PHPMailer принимать в качестве дополнительного параметра IP адрес сетевого интерфейса, с которого мы хотим осуществить отправку. Естественно, что эта возможность будет полезна только на серверах с несколькими белыми IP адресами. А в качестве небольшого дополнения мы отловим достаточно неприятного жучка из кода PHPMailer`а.
Читать дальше →

Много текста про практику работы с PHPUnit/DbUnit

Время на прочтение9 мин
Охват и читатели29K
Доброго времени суток, друзья!
Хочу поделиться опытом по борьбе с PHPUnit/DbUnit в связке с MySQL. Далее небольшая предыстория.

Краткая предыстория


В процессе написания одного веб-приложения возникла необходимость тестировать код на PHP, интенсивно взаимодействующий с БД MySQL. В проекте в качестве фреймворка модульного тестирования использовался порт xUnit — PHPUnit. В результате было принято решение писать тесты для модулей, непосредственно взаимодействующих с базой, подцепив плагин PHPUnit/DbUnit. Дальше я расскажу о тех трудностях, которые возникли при написании тестов и о том, каким способом я их преодолел. В ответ же хотелось бы получить комментарии знающих людей относительно корректности моих решений.
Читать дальше →

Скриншоты в облаках

Время на прочтение3 мин
Охват и читатели3.9K
image
Привет!

Многим из нас нужно иногда расшаривать свои скриншоты, и вместо того, чтоб слать по имейлу/скайпу файл скриншота, мы можем использовать сторонние сервисы, коих немало, и хранить фото там.

Но, благодаря ayurganov, мы можем настроить простой сервис Gyazo на своём хостинге с помощь статьи http://habrahabr.ru/blogs/soft/132937/

Я пошёл дальше и развил тему тем, что скриншоты мои хранятся на RackSpace CloudFiles — CDN от RackSpace, который без проблем выдержит любой «хабраэффект». А линк к файлам красиво шортится через Bit.ly.
Читать дальше →

Вышел первый публичный билд PhpStorm 4.0

Время на прочтение1 мин
Охват и читатели2K
Разработчики сообщают о множестве изменений. Выделим основные:
  • Языковая поддержка типажей. Что это такое, можно ознакомиться здесь
  • PHP code coverage теперь встроен для Xdebug и Zend Debugger
  • В инспектор кода добавлены новые правила для PHP и JS
  • Поддержка новых плюшек из ECMA Script 6 (Harmony)
  • Улучшена поддержка SASS & LESS, CoffeeScript
  • Изменения в UI
  • И много другое...


Ссылки на скачивание:
Mac OS X
Unix
Windows

Отладка iframe приложения непосредственно в среде vk.com с использованием php + xdebug

Время на прочтение3 мин
Охват и читатели7.6K

В этой статье вы узнаете, как можно отлаживать iframe приложение непосредственно внутри среды vk.com, то есть как белый человек. Разработка приложения непосредственно в среде не требует создания песочниц (эмуляции вконтакте), очень удобно работать непосредственно с API вконтакте, видя все переменные, которые передаются туда и обратно непосредственно в трейсе. Не претендую на оригинальность, я просто проверил, что такой статьи нету в тырнете и все, а идея очевидна и проста. Идею придумал за кружкой чая, ибо если бы я успел его допить, то начал бы гуглить.
Читать дальше →