Иногда расширения компилируются в PHP , а не загружаются как отдельные модули.Прежде чем возиться с файлами PHP.ini, вам, вероятно, следует запустить быстрый скрипт PHP, чтобы увидеть, какие модули загружены:
<?php
var_dump(get_loaded_extensions());
Вам также следует остерегаться таких директив PHP, как disable_functions , которые могутотключить функции pcntl.На моей рабочей станции Ubuntu функции pcntl отключены этой директивой:
/etc/php5/apache2/php.ini:disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority
Я предлагаю вам попробовать более широкий поиск grep, чтобы увидеть, упоминается ли pcntl в других местах:
grep -ir pcntl.so /etc/php/7.2
У меня нет файла /etc/php/7.2/cli/conf.d/20-pcntl.ini
Это кажется мне немного странным.Вы можете попробовать поискать там больше файлов php.ini:
sudo find /etc -name "php.ini"
Вам также следует убедиться, что вы не запускаете PHP из командной строки, отличный от Apache.При определенных обстоятельствах (что, к сожалению, случается чаще, чем вы думаете) ваш CLI PHP отличается от вашего Apache PHP. В этой статье обсуждается эта проблема более подробно.
Если я отключу это расширение в .ini Apache, оно не будет загружаться в Apache, но загружается в Cli.
Это на самом деле звучит разумно для меня.Если бы мне пришлось угадывать, я бы сказал, что мудрые менеджеры пакетов Ubuntu / Debian решили, что было бы неразумно позволять функциям pcntl_x запускаться в среде apache, особенно с учетом этого абсолютного и древнего предупреждения .Я не помню, устарело ли это предупреждение сейчас или нет.Я хотел бы отослать вас к этому другому потоку , где я задал некоторые связанные вопросы и мне сказали, что я должен использовать PHP-FPM с apache в режиме событий.
Все это говорит, у меня были некоторые огромныеуспешное написание «многопоточных» приложений в PHP (технически не многопоточных, а скорее многопроцессорных) с использованием pcntl_fork и posix_setsid и т.п.
Подводя итог, я предполагаю, что PCNTL уже загружен как на apache, так и на cli, и мудрые разработчики Ubuntu, вероятно, отключили функции pcntl в php.ini.