X

Установка php pcntl в Ubuntu

Во время работы над одним проектом, потребовалось отлавливать сообщения от ОС. Делается это с помощью семейства функций pcntl. К моему удивлению у меня они были отключены. В этой статье, расскажу как это исправить.

Прежде всего нужно подключить модуль pcntl.so, в моем случае он отсутствовал, поэтому я его скомпилировал и подключил.

Сперва, проверяем свою версию PHP. Если пишете консольный скрипт, то в консоли

$ php -v

Если пишете для работы через веб-сервер, то создайте скрипт phpinfo.php с таким содержимым

<?php

phpinfo();

и посмотрите версию там. В моем случае была нужна версия php 7.2.13

Далее идем на php.net в раздел Downloads и качаете исходники оттуда.

Распаковываете их в папку, например /php-7.2.13, переходите в подпапку /php-7.2.13/ext/pcntl, в ней выполняете

$ phpize
$ ./configure
$ make

В результате, появится файл /php-7.2.13/ext/pcntl/modules/pcntl.so

Этот файл копируете в папку с другими модулями, в моем случае вот сюда: /usr/lib/php/20170718/pcntl.so

Теперь создаем файл подключения модуля: /etc/php/7.2/mods-available/pcntl.ini с таким содержимым

; configuration for php common module
; priority=10
extension=pcntl.so

После этого, открываем php.ini, у меня он был тут: /etc/php/7.2/apache2/php.ini

Теперь включаем модуль (создаем символическую ссылку на файл конфигурации) вот так

phpenmod pcntl

И разрешаем нужные функции pcntl функции, убрав их в параметре

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus

Теперь сохраняемся и перезапускаем apache

$ sudo systemctl restart apache2

Теперь можем создать скрипт и проверить загрузку модуля и доступнгость нужных функций

<?php

var_dump([
    'extension_loaded' => extension_loaded('pcntl'),
    'pcntl_signal exists' => function_exists('pcntl_signal'),
]);

Категории: PHP
Тэги: pcntl