На Ubuntu одночасно кілька версій php


16

Я хочу мати змогу запускати кілька версій PHP на своєму вікні розробки під управлінням Ubuntu 12.04. Що я хочу досягти, це те, що коли я використовую 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.phpнього, просто виводить джерело файлу php. Те саме для 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 для apache та відключати mod_php з 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, 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на, /var/www/cgi-bin/php54.fcgiнаприклад, або просто /var/www/cgi-bin/php.fcgi. Чи можете ви перевірити, чи допомагає це? Просто для версії 5.4.7.

Я перевірив, і, на жаль, це не допомагає. Я змінив virtualhost, щоб відобразити цю зміну, так що рядок дій читаєтьсяAction php-cgi /php-fcgi/php547.fcgi

Я оновив публікацію, щоб відобразити ці зміни, так як вважаю, що добре все одно так

Хм, я тоді перевіряю інші можливості. :)

Мені було цікаво, напевно, мені не потрібні речі suexec, оскільки мені не потрібні різні користувачі для кожної версії php?

Відповіді:


2

У своїх віртуальних хостах ви додали обробник, але ви не встановили обробник, через що він не обробляється. Додати:

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

перед тим, як </Directory>у кожному віртуальному файлі хостів.


0

Мені сподобався цей короткий покроковий огляд від SeeDoubleYou і хотів спробувати сам. Те, чого бракувало, було

  • sudo chmod +x /var/www/cgi-bin/*
    • Оскільки це не було виконано, apache не зміг виконати сценарії cgi
    • Це потрібно для рядка Action php-cgi /php-fcgi/php<version>.fcgi у vhost.confфайлі
  • sudo apt-get install apache2-suexec-pristine libapache2-mod-fastcgi
    • файли suexec та модуль fastcgi відсутні, їх потрібно було встановити спочатку
    • Suexec виконуваний файл необхідний для рядка 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 для каталогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.