Я хочу иметь возможность запускать несколько версий php на моем компьютере для разработки под управлением Ubuntu 12.04. Я хочу добиться того, чтобы, когда я использую localhost в качестве домена, используется значение по умолчанию (скажем, php 5.3.17). Когда я использую 547.localhost в качестве домена, используется php 5.4.7. Я видел несколько руководств, чтобы заставить это работать с помощью fastcgi, но до сих пор мне не удавалось заставить его работать. Я просмотрел эти уроки:
Насколько я понимаю, я сделал все, что нужно. Проблема в том, что php просто не запускается. Когда я иду в http://localhost/somephpfile.php
он просто выводит исходный код файла php. То же самое для http://547.localhost/somephpfile.php
.
Я расскажу, какие шаги я предпринял, в надежде, что кто-то сможет заметить, что я упустил.
sudo apt-get install lamp-server^ phpmyadmin
. После этого у меня был рабочий сервер разработки, на котором была запущена репозиторийная версия php./etc/php/phpfarm
, поэтому исполняемые файлы находятся в /etc/php/phpfarm/inst/php-{version}/bin
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, он просто выводит необработанный файл.
Должно быть, я что-то упустил, но я прошел через этот процесс много раз, и я не могу понять, где что-то пошло не так.
В своих виртуальных хостах вы добавили обработчик, но не установили его, поэтому он не обрабатывается. Добавить:
<FilesMatch "\.php$">
SetHandler php-cgi
</FilesMatch>
перед </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 для конкретного каталога.