Nhiều phiên bản php đồng thời trên Ubuntu


16

Tôi muốn có thể chạy nhiều phiên bản php trên hộp phát triển chạy Ubuntu 12.04. Những gì tôi muốn thực hiện là khi tôi sử dụng localhost làm tên miền, một mặc định được sử dụng (giả sử php 5.3.17). Khi tôi sử dụng 547.localhost làm tên miền php 5.4.7 được sử dụng. Tôi đã thấy một số hướng dẫn để làm việc này bằng cách sử dụng fastcgi nhưng cho đến bây giờ tôi vẫn chưa thể làm cho nó hoạt động. Tôi đã xem các hướng dẫn này:

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multipl-php-versions-ubuntulucid-10-04/
  2. http://www.metod.si/multipl-php-versions-with-apache-2-fastcgi-phpfarm-on-ub Ubuntu /

Theo như tôi có thể thấy tôi đã làm mọi thứ cần thiết. Vấn đề là php đơn giản là không chạy. Khi tôi đi đến http://localhost/somephpfile.phpnó chỉ xuất ra nguồn của tệp php. Tương tự cho http://547.localhost/somephpfile.php.

Tôi sẽ chia nhỏ những bước tôi đã thực hiện với hy vọng ai đó có thể phát hiện ra những gì tôi đã bỏ lỡ.

  1. Đầu tiên tôi cài đặt một ngăn đèn mặc định bằng cách sử dụng sudo apt-get install lamp-server^ phpmyadmin. Sau này, tôi đã có một máy chủ phát triển làm việc chạy phiên bản kho lưu trữ của php.
  2. Sau đó, tôi đã sử dụng phpfarm để tạo hai bản cài đặt php, một cho 5.3.17 và một cho 5.4.7. Bản địa của phpfarm là /etc/php/phpfarm, vì vậy các tệp thực thi nằm trong/etc/php/phpfarm/inst/php-{version}/bin
  3. Sau đó, tôi kích hoạt suaxec và fastcgi cho apache và disabe mod_php với sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. Tiếp theo, tôi chỉnh sửa /etc/apache2/mods-enabled/fastcgi.confđể đọc:

    <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. Sau đó, /var/www/tôi đã tạo một thư mục cgi-bin và trong thư mục này có hai tệp, cho mỗi hai phiên bản php như sau (tôi chỉ hiển thị một thư mục cho 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. Bước cuối cùng là tạo máy chủ ảo. Cuối cùng, tôi có ba tệp trong /etc/apache2/sites-enabled: 000-default, php5.3.17 và php5.4.7 Với các nội dung sau:

    mặc định:

    <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. Cuối cùng tôi đã thay đổi / etc / hosts để đọc

    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
    

Bây giờ tôi sẽ mong mọi thứ hoạt động, nhưng thật đáng buồn là họ không làm thế. Thay vào đó, một tệp php chạy qua php, nó chỉ xuất ra tệp thô.

Phải có một cái gì đó tôi đã bỏ lỡ ở đây, nhưng tôi đã trải qua quá trình nhiều lần và tôi không thể tìm ra nó sai ở đâu.


Một điều tôi gặp phải là nếu tôi đặt tên cho các tệp cgi như bạn đã làm thì nó không hoạt động. Hãy thử đổi tên /var/www/cgi-bin/php-cgi-5.4.7thành /var/www/cgi-bin/php54.fcgiví dụ hoặc chỉ /var/www/cgi-bin/php.fcgi. Bạn có thể kiểm tra nếu điều đó giúp? Chỉ dành cho phiên bản 5.4.7.

Tôi đã kiểm tra và không may điều này không giúp được gì. Tôi cũng đã thay đổi virtualhost để phản ánh sự thay đổi này, vì vậy dòng hành động được đọcAction php-cgi /php-fcgi/php547.fcgi

Tôi đã cập nhật bài đăng để phản ánh những thay đổi này vì tôi nghĩ thật tốt khi có nó như thế

Hmm, tôi sẽ kiểm tra tính tích cực khác sau đó. :)

Tôi đã tự hỏi, có lẽ tôi không cần công cụ suexec vì tôi không cần người dùng khác nhau cho mỗi phiên bản php phải không?

Câu trả lời:


2

Trong các máy chủ ảo của bạn, bạn đã thêm một trình xử lý, nhưng bạn đã không đặt trình xử lý đó là lý do tại sao nó không được xử lý. Thêm vào:

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

trước </Directory>trong mỗi tập tin máy chủ ảo.


0

Tôi thích tổng quan từng bước ngắn này của SeeDoubleYou và muốn tự mình thử nó. Điều còn thiếu là

  • sudo chmod +x /var/www/cgi-bin/*
    • Vì điều này không được thực thi, apache không thể thực thi các tập lệnh cgi
    • Điều này là cần thiết cho dòng Action php-cgi /php-fcgi/php<version>.fcgi trong vhost.conftập tin
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • Mô đun suexec thực thi và mô đun fastcgi bị thiếu, chúng phải được cài đặt trước
    • Việc thực thi suexec là cần thiết cho dòng FastCgiWrapper /usr/lib/apache2/suexectrong fastcgi.conftệp
  • Tôi cũng phải xóa dòng FastCgiIpcDir /var/lib/apache2/fastcgi
    • nếu không tôi đã nhận được thông báo lỗi FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

Đối với bất kỳ ai đang cố gắng đặt php_admin_value và php_value thông qua các tệp .htaccess hoặc vhosts: Điều này là không thể với FCGI. Thay vào đó, bạn có thể sử dụng các tệp .user.ini để đặt các cấu hình php.ini cụ thể của thư mục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.