Beberapa versi php secara bersamaan di Ubuntu


16

Saya ingin dapat menjalankan beberapa versi php di kotak pengembangan saya yang menjalankan Ubuntu 12.04. Apa yang ingin saya capai adalah bahwa ketika saya menggunakan localhost sebagai domain digunakan default (katakanlah php 5.3.17). Ketika saya menggunakan 547.localhost sebagai domain, php 5.4.7 digunakan. Saya telah melihat beberapa tutorial untuk membuatnya bekerja menggunakan fastcgi tetapi sampai sekarang saya belum bisa membuatnya berfungsi. Saya telah melihat tutorial ini:

  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/

Sejauh yang saya bisa lihat, saya telah melakukan semua yang diperlukan. Masalahnya adalah php itu tidak berjalan. Ketika saya pergi ke http://localhost/somephpfile.phpsana hanya menampilkan sumber file php. Sama untuk http://547.localhost/somephpfile.php.

Saya akan memecah langkah apa yang saya ambil dengan harapan seseorang dapat menemukan apa yang saya lewatkan.

  1. Pertama saya memasang tumpukan lampu standar menggunakan sudo apt-get install lamp-server^ phpmyadmin. Setelah ini, saya memiliki server pengembangan yang menjalankan versi repositori dari php.
  2. Kemudian saya menggunakan phpfarm untuk membuat dua instalasi php, satu untuk 5.3.17 dan satu untuk 5.4.7. Lokasi phpfarm adalah /etc/php/phpfarm, sehingga executable berada di/etc/php/phpfarm/inst/php-{version}/bin
  3. Kemudian saya mengaktifkan suaxec dan fastcgi untuk apache dan disabe dengan mod_php sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Selanjutnya, saya diedit /etc/apache2/mods-enabled/fastcgi.confuntuk membaca:

    <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. Kemudian di /var/www/saya membuat folder cgi-bin dan di folder ini dua file, untuk masing-masing dari dua versi php sebagai berikut (saya hanya menunjukkan satu untuk 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. Langkah terakhir adalah membuat host virtual. Pada akhirnya saya memiliki tiga file di /etc/apache2/sites-enabled: 000-default, php5.3.17 dan php5.4.7 Dengan konten berikut:

    default:

    <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. Akhirnya saya mengubah / etc / hosts untuk membaca

    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
    

Sekarang saya berharap hal-hal berfungsi, tetapi sayangnya tidak. Sebaliknya bahwa file php dijalankan melalui php itu hanya menghasilkan file mentah.

Pasti ada sesuatu yang saya lewatkan di sini, tetapi saya telah melalui proses berkali-kali dan saya tidak tahu di mana itu salah.


1 hal yang saya temui adalah bahwa jika saya memberi nama file cgi seperti Anda tidak berhasil. Coba ganti nama /var/www/cgi-bin/php-cgi-5.4.7menjadi /var/www/cgi-bin/php54.fcgimisalnya atau adil /var/www/cgi-bin/php.fcgi. Bisakah Anda memeriksa apakah itu membantu? Hanya untuk versi 5.4.7.

Saya telah memeriksa dan sayangnya ini tidak membantu. Saya telah mengubah virtualhost untuk mencerminkan perubahan ini juga sehingga baris tindakan membacaAction php-cgi /php-fcgi/php547.fcgi

Saya telah memperbarui pos untuk mencerminkan perubahan ini karena saya pikir baik untuk memilikinya seperti itu

Hmm, saya akan memeriksa kemungkinan lain kemudian. :)

Saya bertanya-tanya, mungkin saya tidak membutuhkan barang suexec karena saya tidak memerlukan pengguna yang berbeda untuk setiap versi php, kan?

Jawaban:


2

Di virtualhosts Anda, Anda menambahkan handler, tetapi Anda tidak mengatur handler yang mengapa tidak diproses. Menambahkan:

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

sebelumnya </Directory>di setiap file host virtual.


0

Saya menyukai gambaran singkat ini selangkah demi selangkah oleh SeeDoubleYou dan ingin mencobanya sendiri. Apa yang hilang itu

  • sudo chmod +x /var/www/cgi-bin/*
    • Karena ini tidak dieksekusi, apache tidak dapat menjalankan skrip cgi
    • Ini diperlukan untuk baris Action php-cgi /php-fcgi/php<version>.fcgi dalam vhost.conffile
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • Modul suexec yang dapat dieksekusi dan fastcgi hilang, harus diinstal terlebih dahulu
    • Executable suexec diperlukan untuk baris FastCgiWrapper /usr/lib/apache2/suexecdalam fastcgi.conffile
  • Saya juga harus menghapus garis FastCgiIpcDir /var/lib/apache2/fastcgi
    • kalau tidak, saya mendapat pesan kesalahan FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Bagi siapa pun yang mencoba mengatur php_admin_value dan php_value melalui file .htaccess atau vhosts: Ini tidak dimungkinkan dengan FCGI. Sebagai gantinya, Anda dapat menggunakan file .user.ini untuk mengatur konfigurasi php.ini spesifik direktori.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.