Ubuntuで同時に複数のPHPバージョン


16

Ubuntu 12.04を実行している開発ボックスで複数のphpバージョンを実行できるようにしたい。私が達成したいのは、ローカルホストをドメインとして使用する場合、デフォルトが使用されることです(たとえば、PHP 5.3.17)。ドメインとして547.localhostを使用すると、php 5.4.7が使用されます。fastcgiを使用してこれを機能させるためのチュートリアルを見たことがありますが、これまでは機能させることができませんでした。私はこれらのチュートリアルを見ました:

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
  2. http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/

私が見る限り、私は必要なことをすべてやった。問題は、phpが実行されないことです。私がhttp://localhost/somephpfile.phpそれに行くときは、phpファイルのソースを出力するだけです。についても同じですhttp://547.localhost/somephpfile.php

誰かが私が見逃したものを見つけることができることを期待して、私がとったステップを分析します。

  1. 最初に、を使用してデフォルトのランプスタックをインストールしましたsudo apt-get install lamp-server^ phpmyadmin。この後、リポジトリバージョンのphpを実行する動作中の開発サーバーがありました。
  2. 次に、phpfarmを使用して、5.3.17用と5.4.7用の2つのphpインストールを作成しました。phpfarmの地域は /etc/php/phpfarmですので、実行可能ファイルは/etc/php/phpfarm/inst/php-{version}/bin
  3. 次に、Apacheでsuaxecとfastcgiを有効にし、mod_phpを無効にします sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. 次に、次のように編集/etc/apache2/mods-enabled/fastcgi.confしました。

    <IfModule mod_fastcgi.c>   
        FastCgiIpcDir /var/lib/apache2/fastcgi  
        FastCgiWrapper /usr/lib/apache2/suexec   FastCgiConfig -idle-timeout
        110 -killInterval 120 -pass-header HTTP_AUTHORIZATION -autoUpdate  
        ScriptAlias /php-fcgi/ /var/www/cgi-bin/ 
    </IfModule>
    
  5. 次に、/var/www/cgi-binフォルダーを作成し、このフォルダーに2つのファイルを作成しました。2つのPHPバージョンのそれぞれについて、次のとおりです(5.3.17の1つのみを表示します/var/www/php5317.fcgi)。

    #!/bin/sh
    # you can change the PHP version here.
    version="5.3.17"
    # php.ini file location, */php-5.2.13/lib equals */php-5.2.13/lib/php.ini.
    PHPRC=/etc/php/phpfarm/inst/php-${version}/lib/php.ini
    export PHPRC
    
    PHP_FCGI_CHILDREN=3
    export PHP_FCGI_CHILDREN
    
    PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_MAX_REQUESTS
    
    # which php-cgi binary to execute
    exec /etc/php/phpfarm/inst/php-${version}/bin/php-cgi
    
  6. 最後のステップは、仮想ホストを作成することでした。最後に、次の3つのファイルがあります/etc/apache2/sites-enabled:000-default、php5.3.17およびphp5.4.7次の内容:

    デフォルト:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>
    

    php5.3.17:

    <VirtualHost *:80>
      ServerName 5317.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>
    

    php5.4.7:

    <VirtualHost *:80>
      ServerName 547.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php547.fcgi
      </Directory>
    </VirtualHost>
    
  7. 最後に/ etc / hostsを次のように変更しました

    127.0.0.1   localhost
    127.0.0.1   547.localhost
    127.0.0.1   5317.localhost
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

今、私は物事が機能することを期待していますが、悲しいことに彼らは機能しません。代わりに、phpファイルはphpを介して実行されるため、rawファイルのみが出力されます。

ここで見逃したことがあるに違いありませんが、私は何度もこのプロセスを経験しており、どこが悪いのかわかりません。


私が遭遇した1つのことは、私があなたのようにcgiファイルに名前を付けた場合、それが機能しなかったことでした。たとえば、または単に名前/var/www/cgi-bin/php-cgi-5.4.7を変更し/var/www/cgi-bin/php54.fcgiてみてください/var/www/cgi-bin/php.fcgi。それが役立つかどうか確認できますか?5.4.7バージョンのみ。

私はチェックしましたが、残念ながらこれは役に立ちません。私もこの変更を反映するために、バーチャルホストを変更しているので、アクション行は読みAction php-cgi /php-fcgi/php547.fcgi

私はとにかくようにそれを持って良いと思いますので、私はこれらの変更を反映するためにポストを更新しました

うーん、他の可能性をチェックします。:)

私は疑問に思っていました、おそらくPHPバージョンごとに異なるユーザーが必要ないので、suexecのものは必要ありませんか?

回答:


2

仮想ホストでハンドラーを追加しましたが、ハンドラーを設定しなかったため、処理されません。追加:

<FilesMatch "\.php$">
    SetHandler php-cgi
</FilesMatch>

</Directory>に各仮想ホストファイルで。


0

SeeDoubleYouによるこの短いステップバイステップの概要が気に入ったので、自分で試してみたいと思いました。欠けていたのは

  • sudo chmod +x /var/www/cgi-bin/*
    • これは実行されなかったため、ApacheはCGIスクリプトを実行できませんでした
    • これはファイル内の行Action php-cgi /php-fcgi/php<version>.fcgi に必要vhost.confです
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec実行可能ファイルとfastcgiモジュールが欠落していたため、最初にインストールする必要がありました
    • ファイル内の行FastCgiWrapper /usr/lib/apache2/suexecにはsuexec実行可能ファイルが必要fastcgi.confです
  • 私も行を削除する必要がありました FastCgiIpcDir /var/lib/apache2/fastcgi
    • そうでない場合、エラーメッセージが表示されます FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

.htaccessまたはvhostsファイルを介してphp_admin_valueとphp_valueを設定しようとする場合:FCGIではこれは不可能です。代わりに、.user.iniファイルを使用して、ディレクトリ固有のphp.ini構成を設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.