Я хочу иметь возможность запускать несколько версий 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-default, 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, он просто выводил необработанный файл.
Должно быть, что-то здесь я пропустил, но я много раз проходил этот процесс и не могу понять, где он идет не так.
/var/www/cgi-bin/php-cgi-5.4.7
в/var/www/cgi-bin/php54.fcgi
, например , или просто/var/www/cgi-bin/php.fcgi
. Можете ли вы проверить, помогает ли это? Просто для версии 5.4.7.Action php-cgi /php-fcgi/php547.fcgi
Ответы:
В ваших виртуальных хостах вы добавили обработчик, но не установили обработчик, поэтому он не обрабатывается. Добавлять:
перед
</Directory>
в каждом файле виртуальных хостов.источник
Мне понравился этот краткий пошаговый обзор от SeeDoubleYou, и я хотел попробовать его сам. Чего не хватало было
sudo chmod +x /var/www/cgi-bin/*
Action php-cgi /php-fcgi/php<version>.fcgi
вvhost.conf
файлеsudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
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.
источник