우분투에서 동시에 여러 PHP 버전


16

Ubuntu 12.04를 실행하는 개발 상자에서 여러 PHP 버전을 실행할 수 있기를 원합니다. 내가 달성하고자하는 것은 localhost를 도메인으로 사용할 때 기본값이 사용된다는 것입니다 (php 5.3.17이라고합시다). 도메인으로 547.localhost를 사용하면 PHP 5.4.7이 사용됩니다. fastcgi를 사용 하여이 작업을 수행하는 데 도움이되는 자습서를 보았지만 지금까지는 작동하지 못했습니다. 이 튜토리얼을 살펴 보았습니다.

  1. http://dbforch.wordpress.com/2010/05/21/apache2-fastcgi-multiple-php-versions-ubuntulucid-10-04/
  2. http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/

내가 볼 수있는 한 필요한 모든 것을 다했습니다. 문제는 PHP가 단순히 실행되지 않는다는 것입니다. 내가 갈 때 http://localhost/somephpfile.phpPHP 파일의 소스를 출력합니다. 에 대해서도 동일합니다 http://547.localhost/somephpfile.php.

누군가가 내가 놓친 것을 발견 할 수 있기를 바랍니다.

  1. 먼저을 사용하여 기본 램프 스택을 설치했습니다 sudo apt-get install lamp-server^ phpmyadmin. 이 후 나는 PHP의 리포지토리 버전을 실행하는 개발 서버를 가지고있었습니다.
  2. 그런 다음 phpfarm을 사용하여 두 개의 PHP 설치를 만들었습니다. 하나는 5.3.17, 하나는 5.4.7입니다. phpfarm의 위치는 /etc/php/phpfarm이므로 실행 파일은/etc/php/phpfarm/inst/php-{version}/bin
  3. 그런 다음 아파치에 suaxec과 fastcgi를 활성화하고 sudo a2enmod fastcgi actions suexec && sudo a2dismod php5
  4. 다음으로 다음과 같이 편집 /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>
    
  5. 그런 다음 /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
    
  6. 마지막 단계는 가상 호스트를 만드는 것입니다. 결국 /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>
    
  7. 마지막으로 / 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를 통해 실행되므로 원시 파일 만 출력됩니다.

여기에 놓친 것이 있어야하지만 프로세스를 여러 번 거치고 어디에서 잘못되었는지 알 수 없습니다.


내가 만난 한 가지는 cgi 파일의 이름을 지정하면 작동하지 않는다는 것입니다. 예를 들어 또는로 이름 /var/www/cgi-bin/php-cgi-5.4.7을 바꾸십시오 . 도움이되는지 확인할 수 있습니까? 5.4.7 버전 만 해당됩니다. /var/www/cgi-bin/php54.fcgi/var/www/cgi-bin/php.fcgi

확인했지만 불행히도 도움이되지 않습니다. 이 변경 사항을 반영하도록 Action php-cgi /php-fcgi/php547.fcgi

어쨌든 그렇게하는 것이 좋기 때문에 이러한 변경 사항을 반영하도록 게시물을 업데이트했습니다.

흠, 나는 다른 가능성을 확인합니다. :)

각 PHP 버전마다 다른 사용자가 필요하지 않기 때문에 suexec 항목이 필요하지 않을까요?

답변:


2

가상 호스트에서 처리기를 추가했지만 처리기가 설정되지 않은 처리기를 설정하지 않았습니다. 더하다:

<FilesMatch "\.php$">
    SetHandler php-cgi
</FilesMatch>

전에 </Directory>각각의 가상 호스트 파일입니다.


0

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 구성을 설정할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.