web-dev-qa-db-ja.com

特定のPHP phpbrewを使用してインストールされたバージョンを使用するようにApacheに指示します

開発用に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に指示するにはどうすればよいですか?

23
Vinay Aggarwal

ビルドする必要がありますPHP with apxs2

1)インストール済みであることを確認してくださいSudo apt-get install Apache2-dev

2) Run phpbrew install 5.4.22 +apxs2=/usr/bin/apxs2

次に、Apache構成ファイルにビルドされたモジュールファイルが表示されます。

36
c9s

サーバーフォールトポストを確認してくださいどのApacheにどのPHP使用するか?

ApacheでPHPバージョンを指定する必要があります。

4
aWebDeveloper

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>
2
thaddeusmt

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モジュールのオンとオフを切り替えてサーバーを再起動します。

1
OB7DEV