Ubuntu 12.04를 실행하는 개발 상자에서 여러 PHP 버전을 실행할 수 있기를 원합니다. 내가 달성하고자하는 것은 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를 활성화하고
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/*
- 이것이 실행되지 않았기 때문에 아파치는 cgi 스크립트를 실행할 수 없었습니다.
- 이것은 파일 의 라인
Action php-cgi /php-fcgi/php<version>.fcgi
에 필요vhost.conf
합니다
sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
- suexec 실행 파일과 fastcgi 모듈이 누락되었습니다. 먼저 설치해야했습니다
- 파일 의 행
FastCgiWrapper /usr/lib/apache2/suexec
에 suexec 실행 파일이 필요fastcgi.conf
합니다
- 나는 또한 라인을 제거했다
FastCgiIpcDir /var/lib/apache2/fastcgi
- 그렇지 않으면 오류 메시지가 나타납니다.
FastCgiIpcDir /var/lib/apache2/fastcgi: already defined as "/var/lib/apache2/fastcgi"
- 그렇지 않으면 오류 메시지가 나타납니다.
.htaccess 또는 vhosts 파일을 통해 php_admin_value 및 php_value를 설정하려는 사람 : FCGI에서는 불가능합니다. 대신 .user.ini 파일 을 사용 하여 디렉토리 별 php.ini 구성을 설정할 수 있습니다 .