Установка php pcntl в Ubuntu
Во время работы над одним проектом, потребовалось отлавливать сообщения от ОС. Делается это с помощью семейства функций pcntl. К моему удивлению у меня они были отключены. В этой статье, расскажу как это исправить.
Прежде всего нужно подключить модуль pcntl.so, в моем случае он отсутствовал, поэтому я его скомпилировал и подключил.
Сперва, проверяем свою версию PHP. Если пишете консольный скрипт, то в консоли
1 2 3 |
$ php -v |
Если пишете для работы через веб-сервер, то создайте скрипт phpinfo.php с таким содержимым
1 2 3 4 5 |
<?php phpinfo(); |
и посмотрите версию там. В моем случае была нужна версия php 7.2.13
Далее идем на php.net в раздел Downloads и качаете исходники оттуда.
Распаковываете их в папку, например /php-7.2.13, переходите в подпапку /php-7.2.13/ext/pcntl, в ней выполняете
1 2 3 4 5 |
$ 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 с таким содержимым
1 2 3 4 5 |
; configuration for php common module ; priority=10 extension=pcntl.so |
После этого, открываем php.ini, у меня он был тут: /etc/php/7.2/apache2/php.ini
Теперь включаем модуль (создаем символическую ссылку на файл конфигурации) вот так
1 2 3 |
phpenmod pcntl |
И разрешаем нужные функции pcntl функции, убрав их в параметре
1 2 3 |
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus |
Теперь сохраняемся и перезапускаем apache
1 2 3 |
$ sudo systemctl restart apache2 |
Теперь можем создать скрипт и проверить загрузку модуля и доступнгость нужных функций
1 2 3 4 5 6 7 8 |
<?php var_dump([ 'extension_loaded' => extension_loaded('pcntl'), 'pcntl_signal exists' => function_exists('pcntl_signal'), ]); |
Author: | Tags: /
| Rating:
Leave a Reply