Category Archives: php

Статический анализ PHP-кода с помощью HipHop

Нашёл на хабре статью про интересное использование HipHop, вот её текст: Неожиданно не нашёл информации на русском языке о такой замечательной возможности HipHop, как статический анализ кода для PHP, а потому встречайте обзор, на идею которого меня натолкнула презентация Расмуса на DevConf. А как это вообще? Статический анализ кода — вещь весьма полезная, ведь иначе ошибку …

Read more

Алгоритм конкатенации js-файлов для каждой страницы на лету

Хочется сделать один js-файл на страницу. Думаю над таким алгоритмом. Сразу после процедуры деплоя пользователи грузят кучу отдельных js-файлов, всё как обычно. Первый пользователь, зашедший на страницу, ставит lock в кэш (на 1 минуту), означающий, что именно ему повезло создать единый js-файл. При генерации страницы пути всех подключаемых js-файлов сохраняются в массивчик (у нас уже …

Read more

PHP coding style

Описал часть своего code style для PHP. To be updated.

PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0

Отличная ошибка, на которую обычно просто «забивают», т. к. не понятно, где и что искать. А ошибка вызвана тем, что в кастомном обработчике исключений происходит исключение, после чего php прерывает процесс с таким замечательным и информативным сообщением об ошибке. В моём случае это было своё расширение для класса DateTime

Если не написать тот странный …

Read more

IoC в php

Читал-читал про инверсию управления (Inversion of Control), всякие Pico и Phemto.

Баги в библиотеке memcached (getMulti)

Долго боролись с багом при использовании Memcached::getMulti в php 5.3.8. Как это было: Сначала данные складываются в кэш под некоторыми ключами, потом происходит считывание

Так вот, if ( array_key_exists( $actionCacheKey, $cached ) ) не отрабатывает никогда (равно как isset и ! empty). При этом условие else if ( in_array( $actionCacheKey, array_keys( $cached ) ) …

Read more

Удобная работа с датами в php

Периодически возникают задачи типа вернуть дату «первого числа прошлого месяца», или «прошлого понедельника». Это можно решить как-то так:

А можно гораздо проще:

It’s a kinda magic, но работает. http://www.php.net/manual/ru/datetime.formats.relative.php

Проблема при работе с расширением memcached в php

Работал раньше сайт с memcache. Решили перейти на memcached. И повалились ошибки SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY, причём сначала одна CLIENT ERROR, а уже потом куча SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY. Гугление ничего не дало, а проблема оказалась в следующем: первая ошибка возникала из-за некорректного ключа (пробел …

Read more

Борьба с утечками памяти в php

Более серьёзные способы — просмотр стека (strace -f -p $pid) и дебаг php C-шным дебаггером DBG.

Как настроить Smarty для удобной работы (+наследование)

Smarty — странноватый и глючноватый шаблонизатор, если сравнивать с Django. Но под php ничего под руку не попалось, чтобы работало из коробки, было просто в настройке, и, к тому же, когда-то давно я его уже ковырял. В общем, нужно было срочно прикрутить шаблонизатор — сделал следующее. В классе, ответственном за вывод:

Во вьюхе:

Read more