PHP5.6を使いたい。参考にしたサイト
aptでパッケージ先を追加
普通にapt installできないので、https://packages.sury.org/php/ をパッケージ先に追加する。
GPG認証するパッケージを入れて、キーを追加して、設定ファイルを作る。
# apt install ca-certificates apt-transport-https # wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add - # echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
で、パッケージ情報を追加
# apt update # apt upgrade
適当にPHP5.6周りをインストール
dpkg -l |grep php5.6 で出てきたのから適当に必要そうなのをインストール
# apt install -y php5.6-mysql php5.6-mbstring php5.6-xml php5.6-zip php5.6-cli
PHP5.6がApacheからモジュールとして実行されないようにphp5.6はインストールしない。
次にphp5.6-fpmをインストール。さっきのと同時でもいいのだけど。
# apt install -y php5.6-fpm
次にPHPモジュールも入れる。PHPモジュールはFastCGIもApache SAPI も同じである。当たり前か。
# apt install -y php5.6 php5.6-mysql php5.6-mbstring php5.6-xml php5.6-zip php5.6-cli
VirtualHostごとに実行するPHPを変更する。
php-fpm5.6がserviceとして起動しているのを確認。
# systemctl status php5.6-fpm.service
/etc/php/5.6/fpm/pool.d/www.conf を見ると、
listen = /run/php/php5.6-fpm.sock
とUnixソケットで接続するようになっているので、sites-available/hogehoge.conf で
<VirtualHost *:80> <Directory /path/to/document/root> require all granted </Directory> <FilesMatch \.(html|php)$> SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
としておく。HTMLとPHP拡張子で動く。
require all granted は、いつものように「あー、AH01797: client denied by server configuration」で403を何度も繰り返すため…何度設定しても1度はミスる。
Apacheのモジュールを適宜IN/OUTしておく
これやり忘れてて「SetHandlerのproxyが効いてくれない・・・」とハマりました。
a2dismod mpm_prefork a2enmod mpm_event a2enmod proxy_fcgi
.htaccessのphp_value, php_flagの書き方を変える。
php_value auto_prepend_file /path/to/document/root/auto_prepend.php php_flag error_log Off
とあるのを
SetEnv PHP_VALUE "auto_prepend_file=/path/to/document/root/auto_prepend.php" SetEnv PHP_FLAG "error_log=Off"
とかする。
またAccess Denied
ってエラーがindex.htmlにアクセスすると出る。
AH01071: Got error 'Access to the script '/var/www/htdocs/index.html' has been denied (see security.limit_extensions)\n'
/etc/php/5.6/fpm/pool.d/www.conf で
security.limit_extensions = .php .html
として、/etc/init.d/php5.6-fpm restart で動いた。
で、またハマる
VirtualHostにして、他のサイトでinclude_pathやauto_prepend_fileを設定すると、他のサイトでもこの指定が残る。
んー、なんやねんこれは。
結局、
<VirtualHost> SetEnv PHP_VALUE "auto_prepend_file=/path/to/document/root/auto_prepend.php" </VirtualHost> <VirtualHost> SetEnv PHP_VALUE "auto_prepend_file=" </VirtualHost>
みたいにして逐一書き直す羽目になった…なんやねんこれは…