PHPインストール時のMPMのエラーを手っ取り早く解消する

2020年8月25日

木村優斗です、こんにちは。
LAMP環境の構築時にPHPをインストールしたら下記のエラーが吐かれた場合の対処法です

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.

PHPインストール時のMPMのエラーを解消する

今回はこちらの環境でのお話になります。
CentOS 8.0.1
Apache 2.4.1
PHP 7.4.1

原因

Apacehがマルチスレッド(worker)で動作しているのに対して
CentOS付属のPHPはマルチスレッド処理に対応していないため
PHPが「マルチスレッドじゃ僕動けないよー!!」と悲鳴を上げています。

これをやると?

エラーは解消されますがApacheがシングルスレッドとして動作します。
マシンスペックによってはパフォーマンスを生かしきれないので応急処置です。
なのでパフォーマンスとか今はいいからとにかくエラーを解消したい!という人向けの記事です。

方法

/etc/httpd/conf.modules.d
にある00-mpm.confの中を見てください。
おそらく下記のようになっているはず。

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so

それをこう!

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so
何が変わったかわかりましたでしょうか。
LoadModule mpm_prefork_module modules/mod_mpm_prefork.soのコメントアウトを外し
LoadModule mpm_worker_module modules/mod_mpm_worker.soをコメントにしました。
その後Apacheの再起動も忘れずに。