<環境>
Laravel のバージョン: 8.16.1
PHP のバージョン: 7.4.7
Laravel の特定の機能を使う場合、pcntl(プロセス制御機能)が要求される事があります。
それを使うためにはどうすれば? という事を調べると、「PHPをコンパイルしてください」と凄いテンションが上がらない方法が見つかったりする。
PHPがサポートするプロセス制御機能は、デフォルトでは有効となっていません。
プロセス制御機能を有効にするには、configure のオプションに > --enable-pcntl を付け、CGI 版あるいは CLI 版の PHP をコンパイルする必要があります。
Stack Overflow
How to enable pcntl in php ( while using a framework like Symfony2 )
How to enable PCNTL on Ubuntu server 16.04 - Stack Overflow
普段、Docker を使って開発しているデベロッパーにとっては、なかなか辛みのある修正。
ですが、別に PHP をリコンパイルせずとも、Dockerfile を編集する事で pcntl(プロセス制御機能)を有効化する事は可能です。
具体的には、以下の記述を追加します。
Docker イメージは、公式配布の php-fpm を使う事を前提としています。
RUN docker-php-ext-configure pcntl --enable-pcntl \ && docker-php-ext-install \ pcntl
以下、Dockerfile の編集例。
FROM php:7.4.11-fpm # install composer RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim RUN apt-get update \ && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_mysql pdo_pgsql RUN docker-php-ext-configure pcntl --enable-pcntl \ && docker-php-ext-install \ pcntl WORKDIR /var/www/html
Docker-composer を使っている場合、「docker-compose up -d --build」等のコマンドでリビルド。
pcntl が有効となっているかは、コンテナログイン後に以下のコマンドで確認します。
php -i | grep pcntl
以下の表示があれば、pcntl は有効となっています。
pcntl support => enabled
php コマンドのオプションについては、以下を参照。
PHP: Options - Manual
-m Show compiled in modules
参考サイト
https://github.com/codereviewvideos/docker-php-7/blob/master/Dockerfile
おまけ
一応、こういう方法もあるみたい。
Installing PCNTL module for PHP without recompiling