Wiele wersji php jednocześnie na Ubuntu

16

Chcę mieć możliwość uruchamiania wielu wersji php na moim komputerze programistycznym z systemem Ubuntu 12.04. Chcę osiągnąć to, że kiedy używam localhost jako domeny, używana jest domyślna (powiedzmy php 5.3.17). Kiedy używam 547.localhost jako domeny, używa się php 5.4.7. Widziałem kilka samouczków, aby uruchomić to za pomocą fastcgi, ale do tej pory nie byłem w stanie uruchomić tego. Przejrzałem te samouczki:

  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/

O ile wiem, zrobiłem wszystko, co potrzebne. Problem polega na tym, że php po prostu nie działa. Kiedy idę do http://localhost/somephpfile.phpniego, po prostu wyświetla źródło pliku php. To samo dotyczy http://547.localhost/somephpfile.php.

Podzielę kroki, które podjąłem, mając nadzieję, że ktoś zauważy to, co przegapiłem.

  1. Najpierw zainstalowałem domyślny stos lamp za pomocą sudo apt-get install lamp-server^ phpmyadmin. Po tym miałem działający serwer programistyczny z uruchomioną wersją repozytorium php.
  2. Następnie użyłem phpfarm do stworzenia dwóch instalacji php, jednej dla 5.3.17 i jednej dla 5.4.7. Lokalizacja phpfarm jest /etc/php/phpfarmtaka, że ​​pliki wykonywalne są w/etc/php/phpfarm/inst/php-{version}/bin
  3. Następnie włączam suaxec i fastcgi dla apache i dezaktywuję mod_php przy pomocy sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Następnie zredagowałem, /etc/apache2/mods-enabled/fastcgi.confaby przeczytać:

    <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. Następnie /var/www/utworzyłem folder cgi-bin i w tym folderze dwa pliki, dla każdej z dwóch wersji php w następujący sposób (pokazuję tylko ten dla 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. Ostatnim krokiem było stworzenie wirtualnych hostów. Na koniec mam trzy pliki /etc/apache2/sites-enabled: 000-default, php5.3.17 i php5.4.7 o następującej treści:

    domyślna:

    <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. W końcu zmieniłem / etc / hosts na czytanie

    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
    

Teraz oczekiwałbym, że wszystko zadziała, ale niestety nie. Zamiast tego, że pliki php biegną przez php, po prostu wyprowadza surowy plik.

Musi tu być coś, za czym tęskniłem, ale przeszedłem przez ten proces wiele razy i nie mogę zrozumieć, co poszło nie tak.

SeeDoubleYou
źródło
Jedną z rzeczy, które napotkałem, było to, że jeśli nazwałem pliki cgi tak jak ty, to nie działało. Spróbuj zmienić nazwę /var/www/cgi-bin/php-cgi-5.4.7na /var/www/cgi-bin/php54.fcgina przykład lub po prostu /var/www/cgi-bin/php.fcgi. Czy możesz sprawdzić, czy to pomaga? Tylko dla wersji 5.4.7.
Sprawdziłem i niestety to nie pomaga. Zmieniłem VirtualHost aby odzwierciedlić tę zmianę, a więc linia działania czytaćAction php-cgi /php-fcgi/php547.fcgi
Zaktualizowałem post, aby odzwierciedlić te zmiany, ponieważ myślę, że i tak
Hmm, wtedy sprawdzę inne możliwości. :)
Zastanawiałem się, prawdopodobnie nie potrzebuję suexec, ponieważ nie potrzebuję różnych użytkowników dla każdej wersji php, prawda?

Odpowiedzi:

2

W wirtualnych hostach dodałeś moduł obsługi, ale nie ustawiłeś modułu obsługi, dlatego nie jest on przetwarzany. Dodaj:

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

wcześniej </Directory>w każdym pliku wirtualnego hosta.

użytkownik138869
źródło
0

Podobał mi się krótki przegląd SeeDoubleYou krok po kroku i chciałem go wypróbować samodzielnie. Brakowało

  • sudo chmod +x /var/www/cgi-bin/*
    • Ponieważ nie zostało to wykonane, apache nie był w stanie wykonać skryptów cgi
    • Jest to potrzebne dla linii Action php-cgi /php-fcgi/php<version>.fcgi w vhost.confpliku
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • Brakowało pliku wykonywalnego suexec i modułu fastcgi, najpierw trzeba je było zainstalować
    • Plik wykonywalny suexec jest potrzebny dla linii FastCgiWrapper /usr/lib/apache2/suexecw fastcgi.confpliku
  • Musiałem także usunąć linię FastCgiIpcDir /var/lib/apache2/fastcgi
    • w przeciwnym razie dostaję komunikat o błędzie FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Dla każdego, kto próbuje ustawić wartość php_admin_value i php_value za pomocą plików .htaccess lub vhosts: Z FCGI nie jest to możliwe. Zamiast tego możesz użyć plików .user.ini, aby ustawić specyficzne dla katalogu konfiguracje php.ini.

Elektropepi
źródło