Я хочу мати змогу запускати кілька версій 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
, тому виконувані файли є в/etc/php/phpfarm/inst/php-{version}/bin
- Тоді я включаю suaxec та fastcgi для apache та відключати 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.