====== 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}}