如何使用 pnctl 和 Zend Server 安装 php cli

如何使用 pnctl 和 Zend Server 安装 php cli

我在 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 文件,但它似乎运行正常,没有任何问题。

相关内容