Category Archives: PHP
Новый подход к тестированию Zend Framework/Doctrine приложения: пусть тестируют пользователи!
Когда проект растет, то, как правило, растет и его кодовая база, количество модулей, да и число программистов, вовлечённых в проект. Постепенно от закачки файлов по ftp (если такое было 🙂 команда переходит к Subversion/Git репозитарию, тикет-системам и начинает использовать инструменты для увеличения производительности совместной работы.
Сложный код, плавающие баги и инсайт
Мы три дня ловили баг. Есть такая противная категория ошибок – плавающие баги. Гейзенбаг (англ. Heisenbug) — термин, используемый в программировании для описания программной ошибки, которая исчезает или меняет свои свойства при попытке её обнаружения. Это слово, в отличие от слова «баг», в русском языке практически не используется. Не полностью идентичный, но достаточно близкий по значению русскоязычный термин — «плавающая ошибка». Примером могут являться ошибки, которые проявляются в окончательном варианте программы (релизе),
PHP & APC & SVN не работающая инвалидация кэша при операциях с Subversion
Премия “грабли дня” сегодня присуждаются php-расширению “APC”. Вкратце, APC это байт-код кэшер, который кэширует операцию преобразования php скрипта в байт-код, позволяя каждый раз не загружать код заново из файла, а по-быстрому доставать из сегмента shared memory. Ещё одно преимущество в том, что сегмент памяти шарится между процессами php, и когда на сайт заходит вторйо пользователь, то он идёт уже “на всё готовенькое”.
Автосжатие в php-memcached после 20 000 символов при выключенном сжатии
Хранение сессий в Memory Storage Engine и переполнение кучи (heap)
Сегодня речь порйдёт об интересных граблях с авторизацией на сайте. Хранение сессий у нас реализовано в БД, с помощью Zend_Session_SaveHandler_DbTable. Это очень удобно, т.к. быстрее чем хранение в виде файлов, и нагляднее. Так вот, сегодня при авторизации вдруг стало выдаваться сообщение: Error: Zend_Session is currently marked as read-only. Также очень часто вылетала вот эта ошибка: Exception thrown without a stack frame in Unknown on line 0
Введение в HandlerSocket: описание протокола и расширения php-handlersocket
Сейчас на волне популярности различных NoSQL решений создана интересная разработка – плагин для MySQL, реализущий NoSQL доступ к нему, представленный 20 октября 2010г Yoshinori Matsunobu. В этой заметке я рассмотрю сам протокол, а также его реализацию в php-расширении php-handlersocket.
Интеграция Zend_Cache_Frontend_Page, Nginx и Memcached или 1000 запросов в секунду
Сколько грузится ваш движок? Я имею в виду число врмя генерации скрипта? 0,5 0,6 или может быть аж целую секунду? 🙂 Наш вот срабатывает за 0,8. После последних оптимизаций (см. предыдущие статьи) стал отрабатывать за 0,5. Это примерно 2 запроса в секунду. Хотите раскажу, как довести это число до 1000*?
Автоинкрементные ключи и хранение сессий в БД
Вчера разбирался с интересным багом с Zend_Session_Storage_DbTable. Хотя в конце выяснилось, что он то тут и не причем 🙂
DQL to Raw SQL
Я довольно давно работаю с Doctrine ORM, и очень часто при отладке необходимо посмотреть, какой именно SQL запрос получается из DQL запроса. Для этого раньше я использовал $dql->getSqlQuery() вместе с $dql->getParams(). Первая команда отображает SQL-запрос плейсхолдерами (“?”) вместо переменных, а вторая собственно отображает массив переменных. Приходится смотреть туда-сюда, чтобы сопоставить их. Ладно если запрос маленький, а если большой – то это быстро утомляет.
Подключение PHP-FPM и Memcached к Nginx
На продакшен сервере у нас связка Nginx (отдает статику) + Apache (отдает динамику) + mod_php. Задумали отказаться от Apache, а заодно и подключить PHP в режиме FastCGI с помощью php-fpm, т.к. исследование показало прирост скорости.
