web-dev-qa-db-ja.com

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

Ubuntu 12.04を実行している開発ボックスで複数のphpバージョンを実行できるようにしたい。私が達成したいのは、ドメインとしてlocalhostを使用する場合、デフォルトが使用されることです(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を有効にし、Sudo a2enmod fastcgi actions suexec && Sudo a2dismod php5でmod_phpを無効にします
  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 /var/www/php5317.fcgiの1つのみを示しています)。

    #!/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. 最後のステップは、仮想ホストを作成することでした。最後に、/etc/Apache2/sites-enabled:000-default、php5.3.17およびphp5.4.7に3つのファイルがあり、次の内容が含まれています。

    デフォルト:

    <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ファイルを出力します。

ここで見逃したものがあるに違いありませんが、何度もこのプロセスを経てきたため、どこがうまくいかないのかわかりません。

16
SeeDoubleYou

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

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

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

2
user138869

私は SeeDoubleYo によるこの短いステップバイステップの概要が好きで、自分で試してみたかったです。欠けていたのは

  • 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モジュールが欠落していたため、最初にインストールする必要がありました
    • Suexec実行可能ファイルは、FastCgiWrapper /usr/lib/Apache2/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 files を使用して、ディレクトリ固有のphp.ini構成を設定できます。

0
Elektropepi