Mehrere PHP-Versionen gleichzeitig auf Ubuntu


16

Ich möchte in der Lage sein, mehrere PHP-Versionen auf meiner Entwicklungsbox unter Ubuntu 12.04 auszuführen. Was ich erreichen möchte, ist, dass wenn ich localhost als Domain benutze, ein Standard verwendet wird (sagen wir PHP 5.3.17). Wenn ich 547.localhost als Domain benutze, wird PHP 5.4.7 verwendet. Ich habe einige Tutorials gesehen, um dies mit fastcgi zum Laufen zu bringen, aber bis jetzt war ich nicht in der Lage, es zum Laufen zu bringen. Ich habe mir diese Tutorials angesehen:

  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/

Denn soweit ich sehen kann, habe ich alles getan, was nötig ist. Das Problem ist, dass PHP einfach nicht läuft. Wenn ich dorthin gehe, http://localhost/somephpfile.phpwird nur die Quelle der PHP-Datei ausgegeben. Das selbe für http://547.localhost/somephpfile.php.

Ich werde aufschlüsseln, welche Schritte ich in der Hoffnung unternommen habe, dass jemand in der Lage ist, zu erkennen, was ich verpasst habe.

  1. Zuerst habe ich einen Standardlampenstapel mit installiert sudo apt-get install lamp-server^ phpmyadmin. Danach hatte ich einen funktionierenden Entwicklungsserver, auf dem die Repository-Version von PHP lief.
  2. Dann habe ich mit phpfarm zwei PHP-Installationen erstellt, eine für 5.3.17 und eine für 5.4.7. Die Lokalisierung von phpfarm ist /etc/php/phpfarm, also sind die ausführbaren Dateien in/etc/php/phpfarm/inst/php-{version}/bin
  3. Dann aktiviere ich suaxec und fastcgi für apache und deaktiviere mod_php mit sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Als nächstes habe ich bearbeitet, um /etc/apache2/mods-enabled/fastcgi.confzu lesen:

    <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. Dann habe /var/www/ich in einem Ordner cgi-bin und in diesem Ordner zwei Dateien für jede der beiden PHP-Versionen wie folgt erstellt (ich zeige nur die für 5.3.17 /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. Der letzte Schritt bestand darin, virtuelle Hosts zu erstellen. Am Ende habe ich drei Dateien in /etc/apache2/sites-enabled: 000-default, php5.3.17 und php5.4.7 mit folgendem Inhalt:

    Standard:

    <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. Schließlich habe ich / etc / hosts zum Lesen geändert

    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
    

Jetzt würde ich erwarten, dass die Dinge funktionieren, aber leider nicht. Anstatt dass eine PHP-Datei über PHP läuft, wird nur die Rohdatei ausgegeben.

Es muss etwas geben, das ich hier verpasst habe, aber ich habe den Prozess viele Male durchlaufen und kann nicht herausfinden, wo es schief geht.


Ich habe festgestellt, dass es nicht funktioniert, wenn ich die CGI-Dateien so nenne, wie Sie es getan haben. Versuchen Sie /var/www/cgi-bin/php-cgi-5.4.7zum /var/www/cgi-bin/php54.fcgiBeispiel oder einfach nur umzubenennen /var/www/cgi-bin/php.fcgi. Kannst du überprüfen, ob das hilft? Nur für die 5.4.7 Version.

Ich habe nachgesehen und leider hilft das nicht. Ich habe den virtuellen Host geändert, um diese Änderung wiederzugeben, sodass die Aktionszeile lauteteAction php-cgi /php-fcgi/php547.fcgi

Ich habe den Post aktualisiert, um diese Änderungen

Hmm, ich werde dann nach anderen Möglichkeiten suchen. :)

Ich habe mich gefragt, wahrscheinlich brauche ich das suexec-Zeug nicht, da ich nicht für jede PHP-Version andere Benutzer brauche, oder?

Antworten:


2

In Ihren virtuellen Hosts haben Sie einen Handler hinzugefügt, aber den Handler nicht festgelegt, weshalb er nicht verarbeitet wird. Hinzufügen:

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

vorher </Directory>in jeder virtuellen Hosts-Datei.


0

Ich mochte diese kurze Schritt-für-Schritt-Übersicht von SeeDoubleYou und wollte sie selbst ausprobieren. Was fehlte war

  • sudo chmod +x /var/www/cgi-bin/*
    • Da dies nicht ausgeführt wurde, konnte Apache die CGI-Skripte nicht ausführen
    • Dies wird für die Zeile Action php-cgi /php-fcgi/php<version>.fcgi in der vhost.confDatei benötigt
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec executable und fastcgi module fehlten, sie mussten erst installiert werden
    • Die ausführbare Datei von suexec wird für die Zeile FastCgiWrapper /usr/lib/apache2/suexecin der fastcgi.confDatei benötigt
  • Ich musste auch die Linie entfernen FastCgiIpcDir /var/lib/apache2/fastcgi
    • ansonsten habe ich die fehlermeldung bekommen FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Für alle, die versuchen, php_admin_value und php_value über .htaccess- oder vhosts-Dateien festzulegen: Dies ist mit FCGI nicht möglich. Stattdessen können Sie .user.ini-Dateien verwenden , um verzeichnisspezifische php.ini-Konfigurationen festzulegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.