我有在Ubuntu 11.10上运行的PHP 5.2的Zend Server CE 5.6。 现在需要运行一个使用PHP的pnctlfunction的命令行PHP脚本。
首先,我的path中没有PHP命令行,所以我从Zend创build了一个符号链接:
sudo ln -s /usr/local/zend/bin/php /usr/bin
但是,当我运行我的脚本,我现在得到这个错误:
PHP致命错误:调用未定义函数pcntl_fork()
Zend Web控制面板不提供模块列表中的pnctl,那么如何获得此function?
使用apt-get直接安装PHP安装Zend实例是否安全? 如果是这样,我怎么确定我得到版本5.2? 我想以下将拉入PHP 5.3中:
apt-get install php5-cli
我大概可以混淆,但任何指针,以帮助我避免让一个烂摊子将不胜感激!
为apache安装扩展pcntl :
cd path/to/php/ext/pcntl/ phpize && ./configure && make install echo "extension=pcntl.so" >> /path/to/php.ini apachectl restart
检查一切是否正常。
php -m | grep pcntl
outpout必须是pcntl 。
首先,不要使用符号链接。 相反,扩展你的$ PATH:
export PATH=$PATH:/usr/local/zend/bin:/usr/local/zend/sbin
(你可以把它放在你的$ HOME / .bashrc中)
第二点,pcntl不是一个模块,它是在PHP中编译的。 您可能缺less一些库path。 在调用php之前尝试类似的东西:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zend/lib::/usr/local/zend/lib64
也许不是一个满意的答案,但我最终从另一个虚拟机中复制了以下文件,这个虚拟机恰好有一个工作安装(都是PHP 5.2。*和64位Ubuntu) :
/usr/local/zend/lib/php_extensions/pcntl.so
然后,configurationPHP使用这行:
extension=pcntl.so
(上面可能会在php.ini中,但我把它放在/usr/local/zend/etc/ext.d/pcntl.ini中,并链接到/usr/local/zend/etc/conf.d)。
不过,我仍然无法解释为什么在全新的Zend安装中缺less这个文件。 此外,我不想只是从另一台机器复制.so文件,而不是100%的兼容性,但它似乎运行没有任何问题。