Freebsd
PHP 警告:PHP 啟動:無法載入動態庫
我試圖通過 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,因此無法對此發表評論)。