PHP 5.2.12 → PHP 5.3.1
Поставил новый «Денвер» с PHP 5.3.1 (до этого версия была 5.2.12), сразу же поймал баг — одна из программулин, которую я тихонечко пишу в свободное время стала подвисать вместе с интерпретатором при определённых условиях.
Прокрутив код в голове, я понял, что есть одно место в коде, которое вызывает у меня сомнение — блокировка (flock) файла, убрал обе блокировки, код заработал. Развернул по памяти всю объектную структура проекта, понял, что основной объект, который является точкой доступа к файлам создаётся два раза, у меня забрезжило смутное подозрение. Переделал основную точку входа в обработку файлов на синглетоны. Заработало как часы.
Я не уверен, потому что вполне могу
В общем, не ждите, что миграция при смене версии на 5.3 гарантированно произойдёт без проблем.
Добавлено 15 февраля 04:21: а ещё у меня 5.3 (под Windows) зависает при использовании функции crypt (алгоритм Blowfish, другие не проверял), не всегда зависает, но если входные данные разнообразны, то рано или поздно это происходит.
Как узнать в каком месте зависла программа на PHP?
PHP 5.3.1
Способ проще некуда: ставим модуль PHP xdebug, прописываем его в php.ini (не забываем, что в PHP 5.3 всегда используется «zend_extension»), а в исследуемой программе указываем:
xdebug_start_trace('/какой/то/путь/имя-лога', XDEBUG_TRACE_APPEND);После зависания идём в указанную папку и смотрим в лог, последняя строка в нём и есть источник зависания.
JavaScript V8 и nginx
Игорь Сысоев написал интересную статью «Почему Google V8 пока не подходит для встраивания в сервера», краткая выжимка:
Поскольку V8 разрабатывается в первую очередь для Chrome, то это наложило на него существенный отпечаток и, перефразируя высказывание Генри Форда о цвете машины, можно сказать, что V8 будет хорошо работать в любой программе, при условии, что эта программа называется Chrome. (…) Подытоживая вышеописанное, можно сказать, что на данный момент (версия 2.0.6.4, февраль 2010 года) V8 не подходит для серьёзного встраивания в сервера.