У меня 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% совместимости, но, похоже, он работает без каких-либо проблем.