我曾尝试通过 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 运行该脚本时,它运行良好http://my-url.com/maintain.php
。
我在 FreeBSD 上使用 PHP 5~ 和 Lighttpd。我的问题出在哪里?
答案1
运行此命令(将 /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,因此无法对此发表评论)。
答案2
/usr/local/lib/libpcre.so
是 C 库。
您是自己编译 php 还是从 ports 编译的?
它看起来像是用自定义 PCRE 库编译的,因为通常 php 应该包含 pcre 支持。