====== 83 PHP複数バージョンを共存 ======
===== 1.環境 =====
CentOS 6
PHP 5.3
下記でインストールされている環境を想定
[[01_linux:02_www:15_centos6_suphp]]
===== 2.phpインストール =====
==== レポジトリ用意 ====
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
==== yumインストール ====
php56と、php71を入れてみる
他にも入れる場合は、同じ要領でインストール
# yum install php56 php56-php-{gd,xml,mbstring,mysqlnd}
# yum install php56-php-{opcache,pecl-apcu,pecl-memcached,pecl-zip}
# yum install php71 php71-php-{gd,xml,mbstring,mysqlnd}
# yum install php71-php-{opcache,pecl-apcu,pecl-memcached,pecl-zip}
[[01_linux:02_www:84_php_accelerator|opcache,apcuについて]]
===== 3./etc/suphp.conf =====
handlersをphp56,php71分の用意
[handlers]
;Handler for php-scripts
x-httpd-php="php:/usr/bin/php-cgi"
x-httpd-php56="php:/usr/bin/php56-cgi"
x-httpd-php71="php:/usr/bin/php71-cgi"
===== 4.Apache側のsuphp.conf =====
AddHandler をphp56,php71分と
suPHP_AddHandler をphp56,php71分用意
LoadModule suphp_module modules/mod_suphp.so
suPHP_Engine on
AddHandler x-httpd-php .php
AddHandler x-httpd-php56 .php
AddHandler x-httpd-php71 .php
suPHP_ConfigPath /etc
suPHP_AddHandler x-httpd-php
suPHP_AddHandler x-httpd-php56
suPHP_AddHandler x-httpd-php71
===== 5.後はユーザディレクトリ =====
上記までで設定は完了
後は、phpを使いたいディレクトリに.htaccessを置いてあげるだけです。
※注意 \\
.htaccessで設定する場合に、ちゃんとFilesMatchでphpファイルを指定しないと、\\
全てのファイルに対して、suphpでアクセスする事になってしまう。 \\
その場合、suphp側ではmimeを判断しないので、php.iniの下記を参照し \\
全てのcontents-typeがtext/htmlになってしまう。
default_mimetype = "text/html"
==== php7.1が利用したい場合 ====
SetHandler x-httpd-php71
==== php5.6が利用したい場合 ====
SetHandler x-httpd-php56
==== 何も指定しない場合 ====
.htaccessに何も設定されてない場合は、デフォルトのハンドラー(この環境ではphp5.3)が利用されます。
何も設定しない場合は、下記suphp.confで一番に下に設定されているAddHandler でアクセスする事になります。
下記の場合php53
# To use suPHP to parse PHP-Files
AddHandler x-httpd-php71 .php
AddHandler x-httpd-php56 .php
AddHandler x-httpd-php .php
===== 6. php.ini =====
[[#4.Apache側のsuphp.conf|/etc/httpd/conf.d/suphp.conf]]で、suPHP_ConfigPathを指定してしまうと、どのバージョンのphpでも
同じphp.iniを読みに行ってしまう。
suPHP_ConfigPathをコメントアウトしておくと下記のようになります。
# for v in '' 56 71 ; do php$v --ini | grep Loaded | awk '{print $4}' ; done
/etc/php.ini
/opt/remi/php56/root/etc/php.ini
/etc/opt/remi/php71/php.ini
==== ユーザディレクトリphp.ini ====
ユーザディレクトリでphp.iniを利用したい場合は、利用したいディレクトリにphp.iniを起きます。
このままだと、php.iniを置いたディレクトリしか反映してくれません。
その為、.htaccesに記述する事で、配下のディスクへも反映させます。
suPHP_ConfigPath /home/hoge/public_html/
deny from all
=== .htaccess用の設定 ===
その時、ApacheのDirectoryに「Options」を入れておかないと、 下記のエラーとなります。
AllowOverride FileInfo AuthConfig Limit Options
エラー
/home/hoge/public_html/.htaccess: suPHP_ConfigPath not allowed her
=== php.ini設定のマージ ===
ユーザディレクトリにphp.iniを置いた場合は、iniファイルが読まれる順番が、php.ini -> php.dなので
デフォルトのphp.iniから変更されてる項目はマージしてくれません。
デフォルトから変更の必要なありそうな項目は、php.d内のファイルに記述してあげた方が良い。
session.save_handler = memcached
date.timezone = 'Asia/Tokyo'
===== 7.コマンドラインPHP切り替え =====
$ module load php71
$ php -v
PHP 7.1.17 (cli) (built: Apr 25 2018 07:35:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.1.17, Copyright (c) 1999-2018, by Zend Technologies
{{tag>suphp php}}