web-dev-qa-db-ja.com

複数のPHPバージョン

ここにいる誰もが、CentOS 7で1つのApacheインスタンスを使用してMulti PhPをインストールおよび構成する方法と、それをテストする適切な方法を教えてくれますか?.

11
Tabish

必要なすべてのリポジトリとパッケージをインストールする

https://rpms.remirepo.net/wizard/ に感謝

次のコマンドは、すでにSudo su -または、各コマンドにSudoを追加する必要があります。

yum install httpd -y
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils -y
yum install php56 -y
yum install php72 -y
yum install php56-php-fpm -y
yum install php72-php-fpm -y

両方のfpmサーバーを停止する

systemctl stop php56-php-fpm
systemctl stop php72-php-fpm

デフォルトでは、127.0.0.1ポート9000でリッスンし、異なるポートでリッスンするようにします

sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
sed -i 's/:9000/:9072/' /etc/opt/remi/php72/php-fpm.d/www.conf

2つの異なるバージョンのfpmを異なるポートで起動できるようになりました

systemctl start php72-php-fpm
systemctl start php56-php-fpm
cat > /var/www/cgi-bin/php56.fcgi << EOF
#!/bin/bash
exec /bin/php56-cgi
EOF

cat > /var/www/cgi-bin/php72.fcgi << EOF
#!/bin/bash
exec /bin/php72-cgi
EOF

apacheで実行可能にする

Sudo chmod 755 /var/www/cgi-bin/php56.fcgi
Sudo chmod 755 /var/www/cgi-bin/php72.fcgi

apache用のphp設定を作成します。デフォルトではphp56-fcgiハンドラーを実行します

cat > /etc/httpd/conf.d/php.conf << EOF
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
Action php72-fcgi /cgi-bin/php72.fcgi

<Directory /var/www/html/php56>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
<Directory /var/www/html/php72>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
EOF

テストページを作成し、php72-fcgiを使用するために.htaccessを作成します

mkdir -p /var/www/html/php56
mkdir -p /var/www/html/php72
echo "<?php phpinfo(); ?>" > /var/www/html/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/html/php72/index.php
echo "AddHandler php72-fcgi .php" > /var/www/html/php72/.htaccess

これでテストできるはずです

http://127.0.0.1/php56
http://127.0.0.1/php72

サーバーの再起動後にこれらのインスタンスを自動的に起動する場合

Sudo systemctl enable httpd
Sudo systemctl enable php56-php-fpm
Sudo systemctl enable php72-php-fpm
22
runwuf

@runwufで説明されているように、これは centos-scl リポジトリまたは remi リポジトリで利用可能なソフトウェアコレクションを使用して可能です。

しかし、httpd 2.4のおかげで、SetHandlerをfastcgiプロキシに使用する方がより適切でモダンな方法に見えます。

SetHandler "proxy:fcgi://127.0.0.1:9000"

これはいくつかのブログ投稿で説明されています:

9
Remi Collet

あなたがしようとしていることはこれに似ているようです:

running-two-php-versions-on-the-same-server

私は個人的には同じApacheインスタンスで2つのphpバージョンを試したくありません... tarballによって異なるバージョンのphpをインストールし、tarballによってもインストールされるApacheの別のインスタンスでそれらを実行し、各httpd.confを異なるものにポイントしますPHPのバージョン。

0
runwuf

runwufに返信

こんにちは、SELinuxに関するアプローチに1つの問題があります

sELinuxを無効にする(セキュリティに関心がない場合)、またはSELinuxポートポリシーを管理する

SELinuxを処理しない場合、SELinuxが「強制」モードに設定されているとphp56-php-fpmが起動しません

次のコマンドを実行して、SELinuxにポートを許可させます。

  semanage port -a -t http_port_t -p tcp 9072
  semanage port -a -t http_port_t -p tcp 9056

そして最後にfpmモジュールを起動してみます

ApacheのサーバーAPIをCGI/FastCGIではなくFPM/FastCGIに変更するには、php.confの以下をディレクトリステートメント内に追加する必要がありましたが、ソリューションはほぼ完璧でした。 TCPの代わりにソケットを使用する方法を理解できれば、私は1つの幸せなコーダーになります。

# mod_proxy_fcgi options
<IfModule mod_proxy_fcgi.c>
    <FilesMatch \.php$>
       SetHandler "proxy:fcgi://127.0.0.1:9072"
    </FilesMatch>
</IfModule>
0
Morgan