| |
最近のLinuxでのApache+PHP 8.4インストール方法(ソース経由 on RHEL)
Apache、PHPともソース配布からインストールした記録です。
ただし各種ユーティリティやライブラリはできる限りdnfでインストールしておき、楽ちんをしています。
#-----------------------------
# [1] remiをインストールし有効にしておく
#-----------------------------
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf config-manager --enable epel remi-modular remi-safe
#-----------------------------
# [2] 必要なパッケージのインストール
#-----------------------------
# Apache用。apxs, expat, PCRE2, aprなどのツールはhttpd-develに含まれている
sudo dnf install wget gcc perl httpd-devel openssl openssl-devel
# PHP用
sudo dnf install libxml2-devel zlib sqlite libjpeg libjpeg-devel libpng libpng-devel \
iconv oniguruma sqlite-devel
# ★sqlite-develのパッケージ名に注意。3はつかない。また-devではなく-devel
# ★libjpegとlibpngは-develがつく方もインストールが必要
sudo dnf install --enablerepo=remi oniguruma-devel
# ★--enablereposではなく〜repoなので注意。また実際にはoriguruma5php-develという名前で入る。
#-----------------------------
# [3] Apache httpd serverのインストール
#-----------------------------
mkdir ~/install && cd ~/install
export APAVER=2.4.62
wget https://dlcdn.apache.org/httpd/httpd-${APAVER}.tar.gz
tar xozf httpd-${APAVER}.tar.gz && cd httpd-${APAVER}
./configure --prefix=/usr/local/apache2-${APAVER} --enable-so
make
sudo make install
sudo ln -s /usr/local/apache2-${PHPVER} /usr/local/apache2
# ポート80を使う場合はrootでの実行が必須
sudo /usr/local/apache2/bin/apachectl start
# http://{ホスト名}/
# It works!
# 起動を確認して、停止する。
sudo /usr/local/apache2/bin/apachectl stop
#-----------------------------
# [4] PHPのインストール…の前にlibzipのインストール
#-----------------------------
# libzip-develだけがどうしても見つからないので、ソース配布からインストールする。
sudo dnf install cmake3
cd ~/install
wget https://libzip.org/download/libzip-1.11.2.tar.gz
tar xozf libzip-1.11.2.tar.gz && cd libzip-1.11.2
# 手順は INSTALL.md の通りでOK
mkdir build && cd build
cmake ..
make
make test
sudo make install
# libzip.soは入る位置が特殊なのでLD_LIBRARY_PATHかldconfigに登録が必要
# ここではldconfigに登録する
sudo su
echo /usr/local/lib64 >> /etc/ld.so.conf.d/libzip-so.conf
ldconfig
ldconfig -p | grep /usr/local/lib64
# libzip.soの行が出ることを確認
exit
#-----------------------------
# [5] PHPのインストール
#-----------------------------
export PHPVER=8.4.2
wget https://www.php.net/distributions/php-${PHPVER}.tar.gz
tar xozf php-${PHPVER}.tar.gz && cd php-${PHPVER}
./configure --prefix=/usr/local/php-${PHPVER} --with-apxs2=/usr/bin/apxs \
--with-pear --with-zlib --enable-gd --with-jpeg --with-zip --with-iconv --with-openssl --enable-mbstring
# ★libpngを着脱するオプション(--with-pngなど)はないらしい。
make
sudo make install
libtool --finish ~/install/php-${PHPVER}/libs
sudo ln -s /usr/local/php-${PHPVER} /usr/local/php
※なお8.4から --with-oci8=と--with-pdo_oci=オプションはなくなった。
次のようにPECLからインストールする必要がある。
# プロキシの設定が必要ならば行う
pear config-set http_proxy http://proxy.mycompany.com:8080/
echo 'instantclient,/opt/oracle/instantclient/' | pecl install oci8
echo 'instantclient,/opt/oracle/instantclient/' | pecl install pdo_oci
|
無事インストールできたら、/usr/local/apache2/conf/httpd.conf に以下の2行を追記します。
LoadModule php_module /lib64/httpd/modules/libphp.so
AddType application/x-httpd-php .php
|
LoadModule行はmake installによって自動で追記されている場合があります。
また、libphp.so が/usr/local/apache2/modules 以外の場所に入った場合、
modules/libphp.so の部分を上のように絶対パスで指定すればOKです。
またAddType行は、httpd.confの中に <IfModule mime_module> で始まるブロックがあるので、
その末尾に追記すると後々分かりやすいと思います。
また、php.iniを /usr/local/lib 以外の場所に置きたい場合は以下の行も必要です。
これは私の場合は httpd.conf の末尾に追記しました。
PHPIniDir "/usr/local/php/lib"
|
次にPHPのソース内の php.ini-development を先のPHPIniDirで指定した場所
(指定しない場合は/usr/local/lib)にphp.iniの名前でコピーし、以下の部分を追記します。
include_path = ".:/usr/local/php/lib/php"
;date.timezone =
date.timezone = "Asia/Tokyo"
|
include_pathは、PEARやサードパーティーのライブラリを一切使わない場合は設定不要かもしれません。
一方 date.timezoneは初期は未設定なので、必ず設定しないとPHPのdate関数等の動作が変になると思います。
モジュールを共有ライブラリとしてインストールする場合
configureに--enable-sharedを付けると、zipなどのモジュールがzip.soなどの共有ライブラリとしてインストールされます。
その場合は php.ini の初期状態でコメントになっている以下の行を有効にします。
extension=oci8
extension=pdo_oci
extension=zip
|
なお、これらの共有ライブラリの置き場所は、make install時に「ここに入ったよ!」と表示されますが、
後に別の位置に移動した場合は以下の行の設定も必要です。
extension_dir = "/lib64/php/modules"
|
ccのコンパイル中にKilledと出てしまう
RHEL9でmake中に「cc: Internal error: Killed」と出てccが強制終了される場合、
OSのメモリが不足していることが原因に考えられます。そんなことあるの?
ってあるんだからしょうがない。AWSのEC2サーバでは、t2.microを使用していると実際に発生しました。
解決策の二つは当然、停止可能なプロセスを停止することと、メモリを増やすことですが、
もう一つ、configureに「--disable-fileinfo」を付けるとなぜか落ちずに通るようになりました。
古い作業記録(dnf on RHEL)
RHEL 9.2上でApache 2.4とPHP 8.1をソース配布からインストールした際の記録です。
# apxs, expat, PCRE2, aprなどのツールはhttpd-develに含まれている
sudo dnf install wget gcc perl httpd-devel
wget https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
cd httpd-2.4.57
./configure --enable-so
make
sudo make install
# ポート80を使う場合はrootでの実行が必須
sudo /usr/local/apache2/bin/apachectl start
# 起動を確認して、停止する。
sudo /usr/local/apache2/bin/apachectl stop
sudo dnf install libxml2-devel openssl-devel
wget https://www.php.net/distributions/php-8.1.14.tar.gz
cd php-8.1.14
./configure --with-apxs2=/usr/bin/apxs --with-pear --with-zlib --with-gd \
--with-iconv --enable-mbstring \
--with-oci8=instantclient,/opt/oracle/instantclient21_0_6 \
--with-pdo_oci=instantclient,/opt/oracle/instantclient21_0_6 \
--disable-mbregex --disable-fileinfo
make
sudo make install
|
最近のLinuxでのApache+PHP 8.0インストール方法(dnf on RHEL)
ちなみに全てをdnfで行う方法です。RHEL 9.2で行いました。PHP 8.0がインストールされます。
sudo dnf update -y
sudo dnf install -y httpd
sudo dnf install -y php php-pdo php-mbstring php-devel php-gd php-pear php-mysqlnd
sudo systemctl start httpd
ps -ef | grep httpd
# サーバが起動するたびhttpdが起動するように設定する
sudo systemctl enable httpd
# myuserをapacheグループに追加
sudo usermod -a -G apache myuser
# /var/www/htmlの所有者/グループをmyuser/apacheに移し、apacheグループに書込を許可する
sudo chown -R myuser:apache /var/www
sudo chmod 2775 /var/www
|
これで、/var/www/html の下に .php ファイルを置けばすぐにPHPプログラムとして処理されます。
なおhttpdとphp-fpmのログはそれぞれ /var/log/httpd と /var/log/php-fpm の下に出力されます。

(first uploaded 2023/08/26 last updated 2025/01/04, MISUMI URANO)
|