ฉันต้องการให้สามารถใช้งาน php หลายรุ่นบนกล่องพัฒนาของฉันที่ใช้ Ubuntu 12.04 สิ่งที่ฉันต้องการทำให้สำเร็จคือเมื่อฉันใช้ localhost เป็นโดเมนจะใช้ค่าเริ่มต้น (สมมติว่า php 5.3.17) เมื่อฉันใช้ 547.localhost เป็นโดเมน php 5.4.7 ถูกใช้ ฉันเห็นบางบทช่วยสอนเพื่อให้ทำงานโดยใช้ fastcgi แต่จนถึงตอนนี้ฉันไม่สามารถทำงานได้ ฉันดูบทเรียนเหล่านี้:
- http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
- 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
สำหรับเดียวกัน
ฉันจะพังขั้นตอนที่ฉันทำด้วยความหวังว่าใครบางคนสามารถมองเห็นสิ่งที่ฉันพลาด
sudo apt-get install lamp-server^ phpmyadmin
ครั้งแรกที่ฉันติดตั้งกองไฟเริ่มต้นใช้ หลังจากนี้ฉันมีเซิร์ฟเวอร์การพัฒนาที่ใช้งานได้ใช้เวอร์ชั่นที่เก็บของ php- จากนั้นฉันใช้ phpfarm เพื่อสร้างการติดตั้ง php สองครั้งหนึ่งรายการสำหรับ 5.3.17 และอีกหนึ่งสำหรับ 5.4.7 โลคัลไลเซชันของ phpfarm คือ
/etc/php/phpfarm
ดังนั้น executables จึงอยู่ใน/etc/php/phpfarm/inst/php-{version}/bin
- จากนั้นฉันเปิดใช้งาน suaxec และ fastcgi สำหรับ apache และ disabe mod_php ด้วย
sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
ต่อไปฉันแก้ไข
/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>
จากนั้นใน
/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
ขั้นตอนสุดท้ายคือการสร้างโฮสต์เสมือน ในท้ายที่สุดฉันมีสามไฟล์ใน
/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>
ในที่สุดฉันก็เปลี่ยน / 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 เพียงแค่แสดงผลไฟล์ดิบ
ต้องมีบางอย่างที่ฉันพลาดที่นี่ แต่ฉันได้ผ่านกระบวนการมาแล้วหลายครั้งและฉันไม่สามารถทราบได้ว่ามันผิดพลาดที่ไหน
Action php-cgi /php-fcgi/php547.fcgi
/var/www/cgi-bin/php-cgi-5.4.7
ไปตัวอย่างเช่นหรือเพียงแค่/var/www/cgi-bin/php54.fcgi
/var/www/cgi-bin/php.fcgi
คุณสามารถตรวจสอบว่ามีประโยชน์หรือไม่ เฉพาะเวอร์ชั่น 5.4.7