本来18.04はサポートが切れているので使わない方がよいのだろうけれど、OSをアップグレードして現在動いているサービスが壊れるのが怖い。
sudo apt -y install libtiff-dev libxml2-dev libxpm-dev libsqlite3-dev libcurl4-openssl-dev curl libssl-dev autoconf libpq-dev libxslt1-dev libperl-dev apache2-dev libonig-dev libzip-dev libxml2-dev libssl-dev libsqlite3-dev zlib1g-dev libcurl4-openssl-dev libpng-dev libonig-dev libpq-dev libxslt-dev libzip-dev libgd-dev libtool-bin
wget https://www.php.net/distributions/php-8.2.11.tar.gz
tar zxvf php-8.2.11.tar.gz
cd php-8.2.11/
./configure --with-apxs2 --with-curl --with-openssl --enable-soap --with-mysqli --with-pgsql --with-ldap --enable-intl --with-xsl --with-zlib --enable-zts --enable-mbstring --with-zip --enable-gd
make && make test
Tests failedが0であることを確認して
sudo make install
.bashrcや.profileに
export PATH=$PATH:/usr/local/bin
を追加した方がよい場合も
途中でエラーが出るようになったので、
make clean
autoconf -f
を実行した上で./configureからmakeしたらうまくいった。
しかし、make installでmods-availableにインストールされるのは
php.load
のみで、この状態で
sudo a2enmod
を実行してもPHPファイルが実行ファイルとして認識されない。
そのため、aptでインストールした場合のconfファイルからコピーした
# Using (?:pattern) instead of (pattern) is a small optimization that
# avoid capturing the matching pattern (as $1) which isn't used here
<FilesMatch ".+\.ph(?:ar|p|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(?:ar|p|ps|tml)$">
Require all denied
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
をphp.confとして保存してから
sudo a2enmod
sudo service apache2 restart