Назад | Перейти на главную страницу

Как установить php cli с pnctl вместе с Zend Server

У меня Zend Server CE 5.6 с PHP 5.2 работает на Ubuntu 11.10. Теперь возникла необходимость запустить сценарий PHP из командной строки, использующий функциональность PHP pnctl.

Прежде всего, у меня не было командной строки 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

Я, наверное, мог бы немного разобраться, но любые подсказки, которые помогут мне избежать беспорядка, были бы очень признательны!

Чтобы установить расширение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.

Прежде всего, не используйте символические ссылки. Вместо этого расширите свой $ 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

Возможно, это неудовлетворительный ответ, но в конце концов я «решил» проблему, скопировав следующий файл с другой виртуальной машины, к которой у меня был доступ, у которой была рабочая установка (обе 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. Кроме того, я не хотел бы просто копировать файл .so с другого компьютера, не имея 100% совместимости, но, похоже, он работает без каких-либо проблем.