Freebsd

PHP 警告:PHP 啟動:無法載入動態庫

  • March 4, 2012

我試圖通過 cron 執行我的腳本,但它沒有工作……

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

所以我決定嘗試從 putty 中的命令行執行這個腳本,如下所示:

/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 like 執行它時http://my-url.com/maintain.php

我正在使用 PHP 5~ 和執行 od FreeBSD 的 Lighttpd。我的問題在哪裡?

執行此命令(將 /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,因此無法對此發表評論)。

引用自:https://serverfault.com/questions/363059