我在 Ubuntu 11.10 上运行了 Zend Server CE 5.6 和 PHP 5.2。现在需要运行使用 PHP 的 pnctl 功能的命令行 PHP 脚本。
首先,我的路径中没有 PHP 命令行,因此我从 Zend 命令行创建了一个符号链接:
sudo ln -s /usr/local/zend/bin/php /usr/bin
但是,当我运行脚本时,现在出现此错误:
PHP 致命错误:调用未定义的函数 pcntl_fork()
Zend 网络控制面板在模块列表中没有提供 pnctl,那么如何获得此功能?
使用 apt-get 直接安装 PHP 并与 Zend 实例一起运行是否安全?如果可以,我该如何确保获得 5.2 版本?我猜下面会引入 PHP 5.3:
apt-get install php5-cli
我可能只能勉强应付过去,但如果能得到任何能帮助我避免陷入混乱的指点,我将不胜感激!
答案1
pcntl
要安装apache 的扩展:
cd path/to/php/ext/pcntl/
phpize && ./configure && make install
echo "extension=pcntl.so" >> /path/to/php.ini
apachectl restart
检查一切是否正常。
php -m | grep pcntl
输出必须是pcntl
。
答案2
首先,不要使用符号链接。相反,扩展你的 $PATH :
export PATH=$PATH:/usr/local/zend/bin:/usr/local/zend/sbin
(你可以把它放在你的 $HOME/.bashrc 中)
第二点,pcntl 不是一个模块,它是在 PHP 内部编译的。您可能缺少一些库路径。在调用 php 之前尝试类似这样的操作:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zend/lib::/usr/local/zend/lib64
答案3
也许不是一个令人满意的答案,但我最终通过从我可以访问的另一台虚拟机复制以下文件“解决”了这个问题,该虚拟机恰好有一个有效的安装(两者都是 PHP 5.2。* 和 64 位 Ubuntu):
/usr/local/zend/lib/php_extensions/pcntl.so
然后,使用以下行配置 PHP 来使用它:
extension=pcntl.so
(以上内容可能可以放入 php.ini,但我将其放在 /usr/local/zend/etc/ext.d/pcntl.ini 并链接到 /usr/local/zend/etc/conf.d)。
但是,我仍然无法解释为什么在全新安装的 Zend 中缺少此文件。另外,我不想在没有 100% 兼容性的情况下从另一台机器复制 .so 文件,但它似乎运行正常,没有任何问题。