Назад | Перейти на главную страницу

Предупреждение PHP: запуск PHP: невозможно загрузить динамическую библиотеку

Я пытался запустить свой скрипт через cron, но он не работал ...

*/1 * * * * /usr/local/bin/php -f /usr/local/www/maintain.php > /usr/local/www/php.log

Поэтому я решил попробовать запустить этот скрипт из командной строки в замазке вот так:

/usr/local/bin/php -f /usr/local/www/maintain.php > /usr/local/www/php.log

Затем я получил следующее предупреждение / сообщение об ошибке:

# /usr/local/bin/php /usr/local/www/maintain.php > /usr/local/www/php.log
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/libpcre.so' - Cannot open "/usr/local/lib/php/20090626/libpcre.so" in Unknown on line 0

Но этот скрипт отлично работает, когда я запускаю его через www, например http://my-url.com/maintain.php.

Я использую PHP 5 ~ с Lighttpd, работающим под FreeBSD. Где моя проблема?

Выполните эту команду (заменив / usr / bin / php на путь, который вы используете к двоичному файлу PHP, в данном случае / usr / local / bin / php):

# ldd /usr/bin/php
linux-gate.so.1 =>  (0x00932000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00f16000)
libedit.so.0 => /usr/lib/libedit.so.0 (0x008dd000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00791000)
libgmp.so.3 => /usr/lib/sse2/libgmp.so.3 (0x00de8000)
...

Это позволяет точно увидеть, от каких разделяемых библиотек зависит двоичный файл. Некоторое время назад у меня была эта проблема с какой-то криптографической библиотекой PHP. Ошибки PHP не давали никакой полезной информации о том, почему скрипт не запускается, пока я не запустил эту команду и не смог увидеть, чего не хватает. Хотя ошибка, которую вы видите, касается одной конкретной библиотеки, существует большая вероятность, что библиотека зависит от еще одной, о которой PHP не сообщает вам в ошибке. ldd дает вам эту важную недостающую информацию.

Обратите внимание: здесь я использую CentOS Linux. Для BSD команду ldd можно назвать как-то иначе (я никогда не использовал BSD, поэтому не могу это комментировать).

/usr/local/lib/libpcre.so это библиотека C.

Вы сами компилировали php или из портов?

Похоже, что он был скомпилирован с помощью специальной библиотеки PCRE, потому что обычно php должен включать поддержку pcre.