CentOS 6
PHP 5.3
下記でインストールされている環境を想定
15 CentOS6 suPHP7.2
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
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}
handlersをphp56,php71分の用意
/etc/suphp.conf
[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"
AddHandler をphp56,php71分と
suPHP_AddHandler をphp56,php71分用意
/etc/httpd/conf.d/suphp.conf
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
上記までで設定は完了
後は、phpを使いたいディレクトリに.htaccessを置いてあげるだけです。
※注意
.htaccessで設定する場合に、ちゃんとFilesMatchでphpファイルを指定しないと、
全てのファイルに対して、suphpでアクセスする事になってしまう。
その場合、suphp側ではmimeを判断しないので、php.iniの下記を参照し
全てのcontents-typeがtext/htmlになってしまう。
php.ini
default_mimetype = "text/html"
.htaccess
<FilesMatch "\.php$"> SetHandler x-httpd-php71 </FilesMatch>
.htaccess
<FilesMatch "\.php$"> SetHandler x-httpd-php56 </FilesMatch>
.htaccessに何も設定されてない場合は、デフォルトのハンドラー(この環境ではphp5.3)が利用されます。
.htaccess
何も設定しない場合は、下記suphp.confで一番に下に設定されているAddHandler でアクセスする事になります。
下記の場合php53
/etc/httpd/conf.d/suphp.conf
# To use suPHP to parse PHP-Files AddHandler x-httpd-php71 .php AddHandler x-httpd-php56 .php AddHandler x-httpd-php .php
/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を置いたディレクトリしか反映してくれません。
その為、.htaccesに記述する事で、配下のディスクへも反映させます。
suPHP_ConfigPath /home/hoge/public_html/ <Files ~ "\.ini"> deny from all </Files>
その時、ApacheのDirectoryに「Options」を入れておかないと、 下記のエラーとなります。
<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options
エラー
/home/hoge/public_html/.htaccess: suPHP_ConfigPath not allowed her
ユーザディレクトリにphp.iniを置いた場合は、iniファイルが読まれる順番が、php.ini → php.dなので
デフォルトのphp.iniから変更されてる項目はマージしてくれません。
デフォルトから変更の必要なありそうな項目は、php.d内のファイルに記述してあげた方が良い。
session.save_handler = memcached date.timezone = 'Asia/Tokyo'
$ 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