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 public function __construct( $Time = ‘now’, …

Read more

IoC в php

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

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

Долго боролись с багом при использовании Memcached::getMulti в php 5.3.8. Как это было: Сначала данные складываются в кэш под некоторыми ключами, потом происходит считывание $cached = cache->getMulti( $cacheKeys ); foreach ( $actions as &$action ) { $actionCacheKey = self::getCacheKey( $action ); if ( array_key_exists( $actionCacheKey, $cached ) ) { $action = $cached[$actionCacheKey]; } else if …

Read more

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

Периодически возникают задачи типа вернуть дату «первого числа прошлого месяца», или «прошлого понедельника». Это можно решить как-то так: $dt = self::getCurrentMonthStartDt(); $dt->setTime( 0, 0, 0 ); $dt->setDate( $dt->format( ‘Y’ ), $dt->format( ‘m’ ) — 1, 1 ); return $dt; … $dt = new DateTime(); $dt->modify( ‘-‘ . ( $dt->format( ‘N’ ) — 8 ) . …

Read more

Проблема при работе с расширением 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

$limit = 512; $thresholdDelta = 10; ini_set(‘memory_limit’, $limit . ‘m’); … $memoryThresholdReached = false; $memoryThreshold = ( $limit — $thresholdDelta ) * 1024 * 1024; … while ( $user = $db->plain_fetch( $result ) ) { … // тут работа с данными … // проверка на превышение опасного порога использования памяти if ( ! $memoryThresholdReached && …

Read more

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

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

Read more