Модуль pcntl уже загружен в Unknown в строке 0 - Apache x Cli - PullRequest
0 голосов
/ 21 сентября 2018

Я получаю это предупреждение PHP:

Модуль 'pcntl' уже загружен в Unknown в строке 0

Но он включен только для Apache.Включено на /etc/php/7.2/apache2/conf.d/20-pcntl.ini:

extension = pcntl.so

У меня не включено в CLI.Проверено с помощью:

  • У меня нет /etc/php/7.2/cli/conf.d/20-pcntl.ini файла
  • Команда Grep grep -R extension=pcntl.so /etc/php/7.2 возвращает файл только в папке apache2

ЕслиЯ отключаю это расширение в .ini Apache, оно не загружается в Apache, но загружается в Cli.

Если я включаю это расширение в .ini Apache, я получаю предупреждение о загруженном модуле.

Мне нужно включить PCNTL на Apache, чтобы использовать библиотеку Spatie \ Async.

Это сервер Ubuntu 14.

1 Ответ

0 голосов
/ 21 сентября 2018

Иногда расширения компилируются в 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.

...