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: ,

5 комментариев to “Fatal error: Call to undefined function: pcntl_fork() (Debian)”

  1. Alex Says:

    Все операции прошли успешно, но после рестарта сервера ничего не изменилось.

  2. admin Says:

    Тогда попробуйте пересобрать php с флагом —enable-pcntl и поставить пакетом.

  3. Alex Says:

    Хотя phpinfo() показывает использование /etc/php5/apache2/conf.d/pcntl.ini и загрузку модуля prefork (информация через Апач). Все же не работает.
    Попробовал собрать с флагом –enable-pcnt.
    Машина под Убунтой, сервер продолжает использовать PHP из репозитария Убунты, это видно по дате сборки интерпретатора. А для CLI использует новую сборку. Как его в Убунте правильно настроить?
    Я раньше счачтливо жил под FreeBSD, там всё иначе. )

    P.S. И всё же хотелось бы как-то допилить первый способ.

  4. admin Says:

    Обновляем систему
    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

  5. Alex Says:

    Спасибо за пояснения.
    Сделал по вашему рецепту.
    Пришлось добавить в 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, добавил побел и слэш)

Leave a Reply