アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【PHPApacheUbuntu
【Ubuntu】aptでインストールしたapache2にソースコンパイルしたphpをマルチスレッドモードで組み込む
POSTED BY
2024-04-09

当初、Apache上のCGIとしてPHPを動かすことは考えなかったので、以下のようにそれぞれ単体で入れてしまっていた。

apt install apache2

【Linux】PHP8をソースからインストールする

./configure --enable-mbstring --with-openssl --with-iconv=/usr/local

当然、これではApacheのモジュールとしてPHPは動かない。よって以下、導入したのでメモ。

aptで入れたapacheがmodに対応しているか確認

/usr/sbin/apache2 -l
Compiled in modules:
  core.c
  mod_so.c
  mod_watchdog.c
  http_core.c
  mod_log_config.c
  mod_logio.c
  mod_version.c
  mod_unixd.c

mod_so.cがあるので大丈夫そう。

apxs2コマンドの導入

aptのapache2だけでは入っていない、apache2-devを入れる必要がある。

apt search apxs
ソート中... 完了
全文検索... 完了
apache2-dev/jammy-updates 2.4.52-1ubuntu4.8 amd64
  Apache HTTP Server (development headers)

sudo apt install apache2-dev

which apxs2
/usr/bin/apxs2

導入済みのソースphpディレクトリに移動しmake cleanしてから再度configureする

cd /usr/local/src/php-8.2.3/

make clean

./configure --enable-mbstring --with-openssl --with-iconv=/usr/local --with-apxs2=/usr/bin/apxs2 --enable-zts

なお、他サイトでは--with-tsm-pthreads, --enable-maintainer-ztsなどというのが散見するが、これは古くもうそんなオプションは無いので注意。-enable-ztsだけでよい。

-enable-ztsをつけてマルチスレッドモードのphpモジュールを作成しないと、Apache組み込み時に

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

というエラーで終了する。configureによるPHPの出力にも、

+--------------------------------------------------------------------+
|                        *** WARNING ***                             |
|                                                                    |
| You have built PHP for Apache's current non-threaded MPM.          |
| If you change Apache to use a threaded MPM you must reconfigure    |
| PHP with --enable-zts

とちゃんとガイダンスしてくれている。

ビルド、インストール

念のためもういちどmake cleanをしてからビルド、インストール。

make clean
make
sudo make install

/usr/local/bin/php
/usr/lib/apache2/modules/libphp.so /etc/apache2/mods-available/php.load /etc/apache2/mods-enabled/php.load(シンボリックリンク)

がインストールされるので、ファイルを確認しておく。

/etc/apache2/mods-available/php.loadを編集する

これだけでは.phpファイルを設置しても中身が表示されるだけでPHPが走らない。以下のように書き加える。

LoadModule php_module         /usr/lib/apache2/modules/libphp.so
<filesmatch>
    SetHandler application/x-httpd-php
</filesmatch>

Apacheの停止/起動とphpinfoの表示

systemctl stop apache2
systemctl start apache2
systemctl status apache2

エラーが出ていなければマルチスレッド版PHPモジュール+Apache2の起動成功。

phpinfo.phpを以下のように作成し、ブラウザアクセスで情報画面が出ればOK。

<?php phpinfo();
?>

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】