Fatal error: Call to undefined function: pcntl_fork() (Debian)
Вот такая ошибка заставила поразмыслить :
Fatal error: Call to undefined function: pcntl_fork() in
хотя через «php -m» этот модуль отображался. Далее порыскав по интернетам убедился, что все решается пересборкой php c флагом «—enable-pcntl» , хотя почему то сидела мысль, что это самое тупорылое решение. Далее пришла мысль поковырять исходники установочного пакета, так как модуль отображается и соответственно компилируется вместе с базовым php5.
cd /opt/
apt-get source php5
далее идем в папку с нашим модулем — cd php5*/ext/pcntl
и пробуем поставить отдельно :
phpize
./configure
make
make test && make install
как ни странно модуль встал очень даже великолепно.
далее делаем — echo «extension=pcntl.so» > /etc/php5/conf.d/pcntl.ini
и apache2ctl restart и вуаля — У нас появилась полноценная поддержка!
Tags: Debian, php5
Все операции прошли успешно, но после рестарта сервера ничего не изменилось.
Тогда попробуйте пересобрать php с флагом —enable-pcntl и поставить пакетом.
Хотя phpinfo() показывает использование /etc/php5/apache2/conf.d/pcntl.ini и загрузку модуля prefork (информация через Апач). Все же не работает.
Попробовал собрать с флагом –enable-pcnt.
Машина под Убунтой, сервер продолжает использовать PHP из репозитария Убунты, это видно по дате сборки интерпретатора. А для CLI использует новую сборку. Как его в Убунте правильно настроить?
Я раньше счачтливо жил под FreeBSD, там всё иначе. )
P.S. И всё же хотелось бы как-то допилить первый способ.
Обновляем систему
apt-get update
apt-get -y upgrade
Ставим зависимости и качаем сорсы пакета
cd /usr/src
apt-get install -y dpkg-dev devscripts build-essential fakeroot
apt-get source libapache2-mod-php5
apt-get build-dep -y libapache2-mod-php5
cd php5*
Вносим (—enable-pcnt ) в debian/rules
Собираем:
debuild -us -uc
ставим новый php
dpkg -i ../*.deb
Спасибо за пояснения.
Сделал по вашему рецепту.
Пришлось добавить в debian/setup-mysql.sh, в строку запуска mysql сервера, параметр —user=root, поскольку без этого тесты не запускались (mysql не желает запускаться от имени рута без явного указания, а debuild без рутовых прав отказывается работать).
Время сборки PHP на сервере изменилось, но pcntl_fork() в серверном модуле так и не появилась. (В CLI всё нормально)
Пробовал так же dpkg-buildpackage -b. Результат аналогичный.
Быть может я неверно добавил —enable-pcntl в debian/rules?
Я сделал так:
Нашёл определение строки COMMON_CONFIG (почти в начале файла), в которой указаны опции компиляции как они были бы переданы в ./configure и дописал в конец —enable-pcntl (чуть выше, после —with-system-tzdata, добавил побел и слэш)