開発用にPHP、MySQL、およびApacheスタックをインストールしました。そのインストールでは、次の構成ファイルを使用しています。
/etc/Apache2/
/etc/php5/
後で複数のPHPバージョンをphpbrew
を使用してインストールしました。すべてのバージョンはCLIからアクセス可能で切り替え可能です。しかし、Apacheは常にphpbrew。
インストール済みのPHPバージョン。
$ phpbrew list
Installed versions:
php-5.4.13 (/home/admin1/.phpbrew/php/php-5.4.13)
+default -- --with-bz2=/usr
php-5.5.5 (/home/admin1/.phpbrew/php/php-5.5.5)
php-5.3.27 (/home/admin1/.phpbrew/php/php-5.3.27)
構成ファイルのパスを変更して、phpbrewのPHPを指すようにしました。しかし、何も機能していないようです。
PhpbrewのPHPバージョンを使用するようにApacheに指示するにはどうすればよいですか?
ビルドする必要がありますPHP with apxs2
:
1)インストール済みであることを確認してくださいSudo apt-get install Apache2-dev
。
2) Run phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2
次に、Apache構成ファイルにビルドされたモジュールファイルが表示されます。
サーバーフォールトポストを確認してくださいどのApacheにどのPHP使用するか? 。
ApacheでPHPバージョンを指定する必要があります。
Apacheサーバーで複数のPHPバージョンを管理するために見つけた解決策は、mod_php
の代わりにPHP-FPMとFastCGIを実行することです。この方法でPHP実行中、開発マシンのどのサイトでPHPのどのバージョンを実行するかを選択します。
+fpm
の代わりに+apxs2
phpbrewフラグを使用してPHPバージョンを再コンパイルし、phpbrew fpm start
コマンドで起動し、Apache libapache2-mod-fastcgi
パッケージ、およびおそらくApache mod_php
を無効にします-しかし、動作するとかなり滑らかです。異なる仮想ホストを設定するだけで、複数のバージョンのPHPで同じサイトをテストできます。同じコードを指しますが、異なるPHP-FPMソケットを指します。
次に、2つのバージョンのPHPをphpbrew経由でインストールしたApache 2.4 /etc/Apache2/mods-enables/fastcgi.conf
構成ファイルの例を示します。
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
FastCgiIpcDir /var/lib/Apache2/fastcgi
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
# This is for php 5.6.28
FastCgiExternalServer /usr/lib/cgi-bin/php56-cgi -socket /home/{USERNAME}/.phpbrew/php/php-5.6.28/var/run/php-fpm.sock -pass-header Authorization
# This is for php 7.0.13
FastCgiExternalServer /usr/lib/cgi-bin/php70-cgi -socket /home/{USERNAME}/.phpbrew/php/php-7.0.13/var/run/php-fpm.sock -pass-header Authorization
# this seems to be required by Apache 2.4.10
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
次に、Apache「サイト」仮想ホスト設定で、次のようにエイリアスを使用して実行するPHPバージョンを指定できます。
<VirtualHost *:80>
# ServerName, ServerAdmin, etc
DocumentRoot /var/www/my-site-code
# Then point the php5-fcgi handler to a specific version of PHP
# Here is PHP7, as defined in the fastcgi.conf file
Alias /php5-fcgi /usr/lib/cgi-bin/php70-cgi
</VirtualHost>
Phpbrewが+ apxs2 extを使用してphpバージョンを正常にインストールする場合、Apache2のモジュールライブラリ(/ etc/Apache2/mods-availableではなくusr/lib/Apache2/modules)内に新しい「.so」ファイルが必要です。
上記の.soファイルを指すphp5.loadまたはphp7.loadが/ etc/Apache2/mods-availableフォルダー内に作成されている必要があります。
それらの.loadファイルにリストされている.soファイルは、ロードされるバージョンです。
Php5とphp7のバージョンを切り替えるには、a2enmod/a2dismod php5 php7を使用します。
設定を変更した後、Apache2をリロードする必要があります。
Phpファイルがプレーンテキストとしてレンダリングされる場合、これをphp * .loadファイルに追加する必要があります。
AddType application/x-httpd-php .php
または、新しいバージョンをインストールするたびにphpロードファイルを編集する必要がないように、Apache2構成ファイルでこれをグローバルに設定できます。
SetHandler application/x-httpd-php
これらの手順は、開発サーバーを対象としています。
このための私の個人的なスクリプト:
#!/bin/bash
i=1
c=1
options=()
while [ $c -gt 0 ]
do
v=$(phpbrew list | sed -n "${i}p")
if [ -z "$v" ]; then
c=0
Elif [ -n "$v" ]; then
options+=("$v")
fi
i=$[$i+1]
done
count=0
printf "\n"
echo 'Available versions:'
for i in "${options[@]}"
do
echo "$i $[$count+1]"
count=$[$count+1]
done
printf "\n"
echo 'Which version should be enabled?'
read selected
chosen="${options[$selected - 1]}"
chosen="$(echo -e "${chosen}" | tr -d '[:space:]')"
chosen="$(echo -e "${chosen}" | sed 's/\*//g')"
chosen="$(echo -e "${chosen}" | sed 's/php-//g')"
echo -e "php-${chosen} to be enabled."
source $HOME/.phpbrew/bashrc
phpbrew switch php-${chosen}
if [[ $chosen =~ ^5 ]]; then
Sudo a2dismod php7
Sudo a2enmod php5
Sudo service Apache2 reload
Elif [[ $chosen =~ ^7 ]]; then
Sudo a2dismod php5
Sudo a2enmod php7
Sudo service Apache2 reload
else echo 'This script only works on php 5 and 7';
fi
スクリプトはあなたに代わってphpbrewリストを実行し、数字キーを使用してバージョンを選択できるようにします。次にphpbrewスイッチを実行し、Apache2モジュールのオンとオフを切り替えてサーバーを再起動します。