Сегодня проапгрейдил свою Debian OS 6.0 (настроено apt-pinning).
Среди прочих апдейтов при выполнении dist-upgrade привалили и обновления для ряда установленных модулей php5. Обновился и сам PHP, собственно до версии 5.4.0-2. Но… тут начались непонятные проблемы — ни один локальный сайт не работал! В логах были непонятные ошибки, скажем, для сайта, основанного на фреймворке YII было сообщение:
[Sun Mar 25 13:32:51 2012] [error] [client 127.0.0.1] PHP Fatal error: Call to undefined function (null)() in /home/web/ccc/frontend/index.php on line 4
А на той строке 4 ничего не было особенного, окромя dirname(__FILE__)!
Порыскав-поискав в интернете похожие ошибки, не нашел ничего. Запостил баг на php.net.
Но дело-то неприятное! Ничегошеньки ведь не работает…
Начал копаться дальше. Попробовал запустить скрипты php из консоли, дабы проверить — неужто dirname() убрали? 🙂 И обнаружил еще ряд замечательных уведомлений warnings:
rodush@rdushko:/var/www$ php test.php
Failed loading /usr/lib/php5/20090626+lfs/xdebug.so: /usr/lib/php5/20090626+lfs/xdebug.so: cannot open shared object file: No such file or directory
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20100525+lfs/suhosin.so’ — /usr/lib/php5/20100525+lfs/suhosin.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20100525+lfs/xhprof.so’ — /usr/lib/php5/20100525+lfs/xhprof.so: cannot open shared object file: No such file or directory in Unknown on line 0
А дальше директива dirname() отработала и подключился файл, который я подключал.
Заглянув в директорию, указанную в сообщении, я обнаружил, что таких библиотек действительно нету!
Пока решил не морочить голову: допишут — обновлюсь; решил убрать конфиги php для данных библиотек.
Они расположены в директории /etc/php5/conf.d/
просто переименовал все конфиги, на которые не пришли обновления файлы с суффиксом «old» (на будущее пригодятся :), думаю)
suhosin.ini.old xdebug.ini.old xcache.ini.old xhprof.ini.old
Попробовал вызов из консоли — не ругается php. Попробовал зайти на сайты в броузере и — о чудо! — всё работает!!
Вот такие вот причуды могут быть, если php ругается на невозможность подключить дополнительные модули-библиотеки.