Ubuntu'da aynı anda birden fazla php sürümü


16

Ubuntu 12.04 çalıştıran geliştirme kutumda birden fazla php sürümü çalıştırabilmek istiyorum. Ne yapmak istiyorum domain olarak localhost kullandığınızda bir varsayılan kullanılır (diyelim php 5.3.17). Alan adı olarak 547.localhost kullandığımda 5.4.7 php kullanılır. Fastcgi kullanarak bu çalışmayı sağlamak için bazı öğreticiler gördüm ama şimdiye kadar işe alamadım. Bu eğiticilere baktım:

  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/

Görebildiğim kadarıyla gereken her şeyi yaptım. Sorun php sadece çalışmıyor olmasıdır. Ne zaman o gitmek http://localhost/somephpfile.phpsadece php dosyasının kaynağını çıkarır. Aynısı http://547.localhost/somephpfile.php.

Birisinin kaçırdığım şeyi tespit edebilmesi umuduyla attığım adımları yıkacağım.

  1. Önce kullanarak varsayılan bir lamba yığını kurdum sudo apt-get install lamp-server^ phpmyadmin. Bundan sonra ben php depo sürümünü çalışan bir çalışma geliştirme sunucusu vardı.
  2. Sonra, biri 5.3.17 ve diğeri 5.4.7 için olmak üzere iki php yüklemesi oluşturmak için phpfarm kullandım. Phpfarm lokalizasyonu /etc/php/phpfarm, bu yüzden yürütülebilir dosyalar/etc/php/phpfarm/inst/php-{version}/bin
  3. Sonra apache ve disabe mod_php için suaxec ve fastcgi ile sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Sonra, /etc/apache2/mods-enabled/fastcgi.confokumak için düzenledim :

    <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. Sonra /var/www/bir klasör cgi-bin ve bu klasörde iki php sürümlerinin her biri için aşağıdaki gibi iki dosya oluşturdum (5.3.17 için sadece birini gösterir /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. Son adım sanal ana bilgisayarlar oluşturmaktı. Sonunda üç dosya var /etc/apache2/sites-enabled: 000-default, php5.3.17 ve php5.4.7 Aşağıdaki içeriklerle:

    varsayılan:

    <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. Sonunda okumak için / etc / hosts değiştirdim

    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
    

Şimdi işlerin çalışmasını beklerdim ama ne yazık ki öyle değil. Bunun yerine bir php dosyaları sadece ham dosyayı çıktı php üzerinden çalışır.

Burada kaçırdığım bir şey olmalı, ama birçok kez bu süreçten geçtim ve nerede yanlış gittiğini anlayamıyorum.


Karşılaştığım 1 şey, sizin gibi cgi dosyalarını adlandırdıysam işe yaramadı. Yeniden adlandırmayı deneyin /var/www/cgi-bin/php-cgi-5.4.7için /var/www/cgi-bin/php54.fcgiörneğin ya da sadece /var/www/cgi-bin/php.fcgi. Bunun işe yarayıp yaramadığını kontrol edebilir misiniz? Sadece 5.4.7 sürümü için.

Kontrol ettim ve ne yazık ki bu yardımcı olmuyor. Ben de bu eylemi okumak için sanal ana değiştirdim böylece eylem satırı okumakAction php-cgi /php-fcgi/php547.fcgi

Ben zaten böyle olması iyi olduğunu düşünüyorum çünkü bu değişiklikleri yansıtmak için yazı güncelledim

Hmm, diğer olasılıkları kontrol edeceğim. :)

Merak ediyordum, muhtemelen her php sürümü için farklı kullanıcılara ihtiyacım olmadığı için suexec şeylerine ihtiyacım yok değil mi?

Yanıtlar:


2

Sanal ana makinelerinize bir işleyici eklediniz, ancak işleyiciyi ayarlamadınız, bu yüzden işlenmez. Ekle:

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

önce </Directory>her sanal ana makine dosyasında.


0

SeeDoubleYou'nun bu kısa adım adım genel görünümünü beğendim ve kendim denemek istedim. Eksik olan şuydu

  • sudo chmod +x /var/www/cgi-bin/*
    • Bu yürütülmediğinden, apache cgi komut dosyalarını yürütemedi
    • Bu hat için gereklidir Action php-cgi /php-fcgi/php<version>.fcgi içinde vhost.confdosyanın
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec yürütülebilir ve fastcgi modülü eksikti, önce kurulması gerekiyordu
    • Suexec çalıştırılabilir hattı için gerekli olan FastCgiWrapper /usr/lib/apache2/suexecyer fastcgi.confdosyanın
  • Ayrıca hattı kaldırmak zorunda kaldım FastCgiIpcDir /var/lib/apache2/fastcgi
    • aksi halde hata mesajını aldım FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Php_admin_value ve php_value'yu .htaccess veya vhosts dosyaları aracılığıyla ayarlamaya çalışanlar için: FCGI ile bu mümkün değildir. Bunun yerine .user.ini dosyalarını dizine özgü php.ini yapılandırmalarını ayarlamak için kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.