web-dev-qa-db-ja.com

Apachecentos上の複数のphp

Centos 6.5で同時に複数のPHPバージョンを実行するにはどうすればよいですか?

方法は次のとおりです。

要件
Centos 6.5(6.6および7で動作する可能性があります)
Apache Apache/2.2.15(他のバージョンで動作する可能性があります)

このガイドはインストールして使用します
FASTCGI(代替インストールについてはコメントを参照)
PHPFARM

このインストールはこの方法で行われたため、iredmailと互換性があります。
この設定でサーバーにiredmailをインストールできます。

ステップ1
PHPFarmのインストール

yum install gcc libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel     freetype-devel icu libicu-devel gcc-c++ postgresql-devel aspell-devel git -y

$ cd /opt/
$ git clone https://github.com/cweiske/phpfarm.git phpfarm
$ cd phpfarm/src/
$ cd /opt/phpfarm/src/

これを実行するphpのバージョンごとに。ただし、mysqlサポートなどのカスタムモジュールが必要な場合は、これをスキップして、そのすぐ下の部分を参照してください。

$ ./compile.sh 5.3.1
$ ./compile.sh 5.3.3
$ ./compile.sh 5.5.11

コンパイルエラーが発生した場合は、再起動して再試行してください。/compile.sh5.3.1この問題が発生したとき、これはうまくいきました。

MYSQLとモジュールのサポート
phpバージョン5.5.14のカスタムphpfarmインストールのMySQLサポート(およびその他のモジュール)を取得するための手順。これらの手順は、5.5.14の名前を5.4.3のような名前に変更するだけでどのバージョンでも機能します。もちろん、php内のmysqlモジュールを利用するには、接続するmysqlサーバーが必要です。
これらの手順はこの順序で完了する必要があります
ステップ1A
これらのパスがあり、日時が正しいことを確認してください。これをrootとして実行しました。使用する予定のdate.timezoneが必要です。

cd /opt/phpfarm/src
vi custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

ステップ1B
これらのパスがあり、日時が正しいことを確認してください

cd /opt/phpfarm/src
vi default-custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

ステップ1C
この行に特別な注意を払ってください

--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \

使用しているバージョンに合わせて調整する必要があります。ルートとして

vi custom-options-5.5.14.sh

#!/bin/bash

#gcov='--enable-gcov'
configoptions="
--disable-debug \
--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \
--enable-short-tags \
--with-pear \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-Zip \
--with-zlib \
--with-gettext \
--enable-pdo \
--with-pdo-mysql \
--enable-cgi \
--enable-json \
--with-curl \
--with-openssl \
--enable-openssl \
--with-mysql \
--enable-mysql \
$gcov"

ステップ1D
rootとしてコンパイルします。 Phpfarmは、5.5.14、またはもちろんそれぞれのバージョン番号を持つ他のバージョンをコンパイルすると、custom-options-5.5.14.shという名前のファイルを自動的に検索します。

./compile.sh 5.5.14

後でphpinfo();を使用してWebページをチェックアウトするとき。機能を実行すると、これらのモジュールのサポートと、ページ上のさまざまな「コマンドの構成」テキストが表示されます。


これらの手順が順番に完了していない場合は、もう一度実行する必要があります。これを再度行うには、最初にsrcフォルダーとinstフォルダーからファイルを削除します。

rm -rf /opt/phpfarm/inst/php-5.5.14

rm -rf /opt/phpfarm/src/php-5.5.14

Rmはフォルダーを削除し、-rfはrrecursiveおよびfforceを表します。参照: http://linuxcommand.org/lc3_man_pages/rm1.html


エラーがある場合は、このサイトで確認してください。他にもありますが、これは便利だと思いました。

http://crybit.com/20-common-php-compilation-errors-and-fix-unix/


Mysqlおよびモジュールサポートのリファレンス

PHP Farm を使用してphp拡張機能をアクティブ化する問題


ステップ2
プロファイルにphpfarmを追加する

これをrootおよび非rootユーザーの.bashrcの下部に追加します。 .bashrcファイルはユーザーのルートフォルダーまたはcd〜 /、次にls -allにあり、表示されるはずです。

PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

また、rootおよび非rootユーザーの.bashrcファイルに追加した後、ターミナルでこれを実行します

export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

ターミナルを終了して再度ログインします。このコマンドを試してください

switch-phpfarm 5.5.11

diffphpバージョンを切り替えることができるはずです

[root@test joe]# switch-phpfarm 5.5.11
Setting active PHP version to 5.5.11
PHP 5.5.11 (cli) (built: May 17 2014 22:01:31) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
[root@test joe]#

centOS/RHEL 6、64ビット(x86_64)のリポジトリを追加します。

cd /tmp
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

ステップ3
yumsをインストールします

yum install php php-cli mod_fastcgi

注意 この時点で、switch-phpfarm 5.5.11を実行しようとすると、正しく機能しませんが、問題ありません。異なるバージョンのphpで複数のWebサイトを実行することはできます

ステップ4
cgi-binが作成され、ファイルが構成されていることを確認します

$ cd  /var/www

Cgi-binがまだここにない場合は、作成します

$ mkdir cgi-bin

使用するphpのバージョンごとに、これらのファイルの1つを作成します。末尾をバージョン番号に置き換えます

vi /var/www/cgi-bin/php.fastcgi.5.5.11

ステップ5
ファイルphp.fastcgi.5.5.11内

#!/bin/bash
PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

最初の行

PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"

これを使用する魔女php.iniはubuntuでは異なります。最後の行

exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

また、特定のバージョンごとに変更する必要があります。それが何をするのかはわかりませんが、変更する必要があることは知っています。

ステップ6
fastcgiファイルをApache:apacheユーザーおよびグループに対して実行可能にする

例1

[root@test joe]# chown Apache:apache /var/www/cgi-bin/php.fastcgi.5.5.11
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.5.11

例2

[root@test joe]# chown Apache:apache /var/www/cgi-bin/php.fastcgi.5.3.3
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.3

例3

[root@test joe]# chown Apache:apache /var/www/cgi-bin/php.fastcgi.5.3.1
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.1

ステップ7
httpd.confファイルの編集
/etc/httpd/conf/httpd.confファイルに必要なものは次のとおりです。最初に「NameVirtualHost *:80」を見つけて、これを開始点として使用します。「#」は、行がコメント化されていることを意味します。 #を削除して、この行のコメントを解除します。これで、次のようになります。

NameVirtualHost *:80

これにより、複数の仮想ホストが各仮想ホスト参照の「サーバー名」によってApache上で動作できるようになります。私はあなたがなしで何ができるかをあなたに示すためにコメントされたいくつかの行を残しました。 /etc/httpd/conf/httpd.confの下部が次のようになっていることを確認してください。

<VirtualHost *:80>
    ServerName test1.com
   #ServerAdmin [email protected]
    DocumentRoot /var/www/html/test1
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test1">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.5.11
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test2.com
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test2
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test2">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.3
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test3.org
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test3
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test3">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.1
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test4.net
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test6
</VirtualHost>

ステップ8
etc/hostsファイルの編集
etc/hostsファイルに必要なものは次のとおりです。

127.0.0.1   localhost test1.com test2.com test3.org test4.net
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

ステップ9

サーバーを再起動します

service httpd restart

ステップ10
テスト
各index.phpサイトにphpinfo()を追加すると、すべてのphpバージョンが異なることに気付くでしょう。また、最後のtest4.netはデフォルトのcentosを使用します。また、test3.orgとtest4.netは.comのものではありませんが、引き続き機能することに注意してください。将来的には、mysqlサポートを使用してインストールできるようにphpfarmファイルのガイドを作成する予定です。これは私が遭遇した別の問題でした。これにいくつかのエラーに気付いた場合、またはそれを機能させるのが難しい場合は、コメントしてください。できるだけ早く連絡します。

16
Harry Fairbanks

私からのいくつかの通知:

  1. yum install php php-cli mod_fastcgiが正しくありません。 mod_phpを有効にしないでください。また、mod_fastcgiは、mod_fcgidを使用して外部リポジトリなしでインストールできます。
  2. PHP 5.2およびlibxml> = 1.2.9の場合、このパッチを適用する必要があります libxml29_compat.patch
  3. mod_phpを有効にせずにすべてのホストのphpバージョンを設定するには、これをhttpd.confに追加します

    <Directory "/var/www">
        Options All +ExecCGI
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin/php.fastcgi.5.5.18
    </Directory>
    
  4. 64ビットシステムでコンパイルする場合、lib64フォルダーが原因でコンパイルが失敗するため、configoptionsに--with-libdir=lib64を追加する必要があります。
1
Plamen Vasilev