หลายรุ่น php พร้อมกันบน Ubuntu


16

ฉันต้องการให้สามารถใช้งาน php หลายรุ่นบนกล่องพัฒนาของฉันที่ใช้ Ubuntu 12.04 สิ่งที่ฉันต้องการทำให้สำเร็จคือเมื่อฉันใช้ localhost เป็นโดเมนจะใช้ค่าเริ่มต้น (สมมติว่า php 5.3.17) เมื่อฉันใช้ 547.localhost เป็นโดเมน php 5.4.7 ถูกใช้ ฉันเห็นบางบทช่วยสอนเพื่อให้ทำงานโดยใช้ fastcgi แต่จนถึงตอนนี้ฉันไม่สามารถทำงานได้ ฉันดูบทเรียนเหล่านี้:

  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/

สำหรับเท่าที่ฉันเห็นฉันได้ทำทุกอย่างที่จำเป็น ปัญหาคือ php ไม่ทำงาน เมื่อฉันไปที่http://localhost/somephpfile.phpมันก็แค่เอาท์พุทแหล่งที่มาของไฟล์ php http://547.localhost/somephpfile.phpสำหรับเดียวกัน

ฉันจะพังขั้นตอนที่ฉันทำด้วยความหวังว่าใครบางคนสามารถมองเห็นสิ่งที่ฉันพลาด

  1. sudo apt-get install lamp-server^ phpmyadminครั้งแรกที่ฉันติดตั้งกองไฟเริ่มต้นใช้ หลังจากนี้ฉันมีเซิร์ฟเวอร์การพัฒนาที่ใช้งานได้ใช้เวอร์ชั่นที่เก็บของ php
  2. จากนั้นฉันใช้ phpfarm เพื่อสร้างการติดตั้ง php สองครั้งหนึ่งรายการสำหรับ 5.3.17 และอีกหนึ่งสำหรับ 5.4.7 โลคัลไลเซชันของ phpfarm คือ /etc/php/phpfarmดังนั้น executables จึงอยู่ใน/etc/php/phpfarm/inst/php-{version}/bin
  3. จากนั้นฉันเปิดใช้งาน suaxec และ fastcgi สำหรับ apache และ disabe mod_php ด้วย sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. ต่อไปฉันแก้ไข/etc/apache2/mods-enabled/fastcgi.confเพื่ออ่าน:

    <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. จากนั้นใน/var/www/ฉันสร้างโฟลเดอร์ cgi-bin และในโฟลเดอร์นี้สองไฟล์สำหรับแต่ละรุ่น php สองดังต่อไปนี้ (ฉันแสดงเฉพาะไฟล์สำหรับ 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. ขั้นตอนสุดท้ายคือการสร้างโฮสต์เสมือน ในท้ายที่สุดฉันมีสามไฟล์ใน/etc/apache2/sites-enabled: 000- ค่าเริ่มต้น, php5.3.17 และ php5.4.7 ด้วยเนื้อหาดังต่อไปนี้:

    ค่าเริ่มต้น:

    <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. ในที่สุดฉันก็เปลี่ยน / etc / hosts เพื่ออ่าน

    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
    

ตอนนี้ฉันคาดว่าสิ่งต่าง ๆ จะทำงาน แต่น่าเศร้าที่พวกเขาไม่ได้ แทนว่าไฟล์ php ทำงานผ่าน php เพียงแค่แสดงผลไฟล์ดิบ

ต้องมีบางอย่างที่ฉันพลาดที่นี่ แต่ฉันได้ผ่านกระบวนการมาแล้วหลายครั้งและฉันไม่สามารถทราบได้ว่ามันผิดพลาดที่ไหน


สิ่งหนึ่งที่ฉันพบคือถ้าฉันตั้งชื่อไฟล์ cgi เหมือนที่คุณทำมันไม่ได้ผล ลองเปลี่ยนชื่อ/var/www/cgi-bin/php-cgi-5.4.7ไปตัวอย่างเช่นหรือเพียงแค่/var/www/cgi-bin/php54.fcgi /var/www/cgi-bin/php.fcgiคุณสามารถตรวจสอบว่ามีประโยชน์หรือไม่ เฉพาะเวอร์ชั่น 5.4.7

ฉันได้ตรวจสอบและน่าเสียดายที่มันไม่ได้ช่วย ฉันได้เปลี่ยน virtualhost เพื่อสะท้อนการเปลี่ยนแปลงนี้เช่นกันดังนั้นบรรทัดแอ็คชันจึงอ่านAction php-cgi /php-fcgi/php547.fcgi

ฉันได้อัปเดตโพสต์เพื่อให้สอดคล้องกับการเปลี่ยนแปลงเหล่านี้เนื่องจากฉันคิดว่ามันดีที่จะเป็นแบบนั้นอยู่ดี

อืมฉันจะตรวจสอบความเป็นไปได้อื่น ๆ แล้ว :)

ฉันสงสัยว่าบางทีฉันไม่ต้องการสิ่ง suexec เพราะฉันไม่ต้องการผู้ใช้ที่แตกต่างกันสำหรับแต่ละรุ่น php ใช่มั้ย

คำตอบ:


2

ใน virtualhosts ของคุณคุณเพิ่มตัวจัดการ แต่คุณไม่ได้ตั้งค่าตัวจัดการซึ่งเป็นสาเหตุที่มันไม่ถูกประมวลผล เพิ่ม:

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

ก่อนหน้านี้</Directory>ในไฟล์โฮสต์เสมือนแต่ละไฟล์


0

ฉันชอบภาพรวมทีละขั้นตอนสั้น ๆ โดยSeeDoubleYouและต้องการลองด้วยตัวเอง สิ่งที่ขาดหายไปคือ

  • sudo chmod +x /var/www/cgi-bin/*
    • เนื่องจากสิ่งนี้ไม่ถูกดำเนินการ apache จึงไม่สามารถเรียกใช้สคริปต์ cgi ได้
    • สิ่งนี้จำเป็นสำหรับบรรทัดAction php-cgi /php-fcgi/php<version>.fcgi ในvhost.confไฟล์
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • suexec executable และโมดูล fastcgi หายไปพวกเขาจะต้องติดตั้งก่อน
    • จำเป็นต้องเรียกใช้งาน suexec สำหรับบรรทัดFastCgiWrapper /usr/lib/apache2/suexecในfastcgi.confไฟล์
  • ฉันยังต้องลบบรรทัด FastCgiIpcDir /var/lib/apache2/fastcgi
    • มิฉะนั้นฉันได้รับข้อความแสดงข้อผิดพลาด FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"

สำหรับทุกคนที่พยายามตั้งค่า php_admin_value และ php_value ผ่านไฟล์. htaccess หรือ vhosts: ไม่สามารถทำได้กับ FCGI แต่คุณสามารถใช้ไฟล์. user.iniเพื่อตั้งค่าการกำหนดค่า php.ini เฉพาะไดเรกทอรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.