несколько php на apache centos

Как можно одновременно запускать несколько версий php на Centos 6.5?

Вот как.

Требования
Centos 6.5 (возможно работает с 6.6 и 7)
Apache Apache/2.2.15 (возможно, работает с другими версиями)

Это руководство устанавливает и использует
FASTCGI (см. Комментарии для альтернативной установки)
PHPFARM

Эта установка была выполнена таким образом, чтобы она совместима с iredmail.
Вы можете установить iredmail на сервер с этой настройкой.

Шаг 1
Установка PHPFarm

yum install gcc libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel     freetype-devel icu libicu-devel gcc-c++ postgresql-devel aspell-devel git -y

$ cd /opt/
$ git clone https://github.com/cweiske/phpfarm.git phpfarm
$ cd phpfarm/src/
$ cd /opt/phpfarm/src/

Для каждой версии php вы хотите запустить это. Однако, если вы хотите, чтобы пользовательские модули, такие как поддержка mysql, пропустили это и увидели деталь чуть ниже нее.

$ ./compile.sh 5.3.1
$ ./compile.sh 5.3.3
$ ./compile.sh 5.5.11

Если вы получаете ошибки компиляции, перезагрузитесь и попробуйте. /compile.sh 5.3.1 снова Это сработало для меня, когда я столкнулся с этой проблемой

Поддержка MYSQL и модулей
Шаги для получения поддержки MySQL (и других модулей) для установки phpfarm для php версии 5.5.14. Эти инструкции работают для любой версии, просто переименуйте 5.5.14 на то, что когда-либо было похоже на 5.4.3. Конечно, вам понадобится сервер mysql для подключения, чтобы использовать модуль mysql в php.
Эти шаги необходимо выполнить в этом порядке
Шаг 1А
Убедитесь, что у вас есть эти пути и время даты правильное. Я сделал это как root. У вас должна быть дата. Timezone, которую вы собираетесь использовать.

cd /opt/phpfarm/src
vi custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

Шаг 1B
Убедитесь, что у вас есть эти пути и правильное время

cd /opt/phpfarm/src
vi default-custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

Шаг 1С
Обратите особое внимание на эту строку

--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \

его нужно будет скорректировать для версии, с которой вы работаете. Как root

vi custom-options-5.5.14.sh

#!/bin/bash

#gcov='--enable-gcov'
configoptions="
--disable-debug \
--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \
--enable-short-tags \
--with-pear \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip \
--with-zlib \
--with-gettext \
--enable-pdo \
--with-pdo-mysql \
--enable-cgi \
--enable-json \
--with-curl \
--with-openssl \
--enable-openssl \
--with-mysql \
--enable-mysql \
$gcov"

Шаг 1D
Теперь скомпилируйте его как root. Phpfarm автоматически будет искать файл с именем custom-options-5.5.14.sh при компиляции 5.5.14 или любой другой версии с соответствующими номерами версий.

./compile.sh 5.5.14

Позже, когда вы просматриваете свою веб-страницу с помощью phpinfo(); функции, вы увидите поддержку этих модулей и другой текст "Configure Command" на странице.


Если эти шаги не будут завершены, то вам, возможно, придется это сделать снова. Для этого сначала удалите файлы из папки src и папки inst.

rm -rf /opt/phpfarm/inst/php-5.5.14

rm -rf /opt/phpfarm/src/php-5.5.14

Rm удалит папку, а -rf означает r рекурсивный и f force. Ссылка: http://linuxcommand.org/lc3_man_pages/rm1.html


Если у вас есть ошибки, проверьте этот сайт. Есть и другие, но я нашел это полезным.

http://crybit.com/20-common-php-compilation-errors-and-fix-unix/


Ссылка на поддержку mysql и модуля

Ошибка активации расширения php с помощью PHP Farm

Ошибки компиляции PHP
http://crybit.com/20-common-php-compilation-errors-and-fix-unix/


Шаг 2
Добавление phpfarm в ваши профили

добавьте это в конец.bashrc для пользователя root и non-root. Файл.bashrc можно найти в корневой папке пользователей или cd ~/then ls -all, и вы должны увидеть его.

PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

также выполните это в терминале после того, как вы добавили его в файлы.bashrc для пользователя root и non-root

export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

теперь выйдите из терминала и войдите в систему. Попробуйте эту команду

switch-phpfarm 5.5.11

вы должны иметь возможность переключаться между версиями diff php

[[email protected] joe]# switch-phpfarm 5.5.11
Setting active PHP version to 5.5.11
PHP 5.5.11 (cli) (built: May 17 2014 22:01:31) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
[[email protected] joe]#

добавьте репо для CentOS/RHEL 6, 64 бит (x86_64):

cd /tmp
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

Шаг 3
установить юмы

yum install php php-cli mod_fastcgi

ПРИМЕЧАНИЕ. В этот момент, если вы попытаетесь запустить switch-phpfarm 5.5.11, он не будет работать нормально, но это нормально. мы по-прежнему будем иметь возможность запускать несколько веб-сайтов с разными версиями php

Шаг 4
Убедитесь, что ваш cgi-bin создан и файлы настроены

$ cd  /var/www

Если cgi-bin уже здесь не создает его

$ mkdir cgi-bin

Для каждой версии php вы намерены использовать один из этих файлов. Замените окончание номером версии

vi /var/www/cgi-bin/php.fastcgi.5.5.11

шаг 5
Внутри файла php.fastcgi.5.5.11

#!/bin/bash
PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

Первая строка

PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"

Сообщает вам, что witch php.ini использовать это в ubuntu. Последняя строка

exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

также необходимо изменить для каждой конкретной версии. Я не уверен, что он делает, но я знаю, что его нужно изменить.

Шаг 6
Включить файлы fastcgi для выполнения для apache: пользователь и группа apache

Пример 1

[[email protected] joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.5.11
[[email protected] joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.5.11

Пример 2.

[[email protected] joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.3
[[email protected] joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.3

Пример 3.

[[email protected] joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.1
[[email protected] joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.1

Шаг 7
Редактирование файла httpd.conf
Вот что вам нужно для файла /etc/httpd/conf/httpd.conf. Сначала найдите "NameVirtualHost *: 80" и используйте это как отправную точку. "#" Означает, что строка закомментирована. Раскомментируйте эту строку, удалив #. Теперь это должно выглядеть так.

NameVirtualHost *:80

Это позволит нескольким виртуальным хостам работать в Apache по их "ServerName" в каждой ссылке виртуального хоста. Я оставил некоторые строки, прокомментированные, чтобы показать вам, с чем вы можете обойтись. Убедитесь, что дно /etc/httpd/conf/httpd.conf выглядит так.

<VirtualHost *:80>
    ServerName test1.com
   #ServerAdmin [email protected]
    DocumentRoot /var/www/html/test1
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test1">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.5.11
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test2.com
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test2
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test2">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.3
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test3.org
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test3
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test3">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.1
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test4.net
#   ServerAdmin [email protected]
    DocumentRoot /var/www/html/test6
</VirtualHost>

Шаг 8
Редактирование файла etc/hosts
вот что вам нужно в файле etc/hosts.

127.0.0.1   localhost test1.com test2.com test3.org test4.net
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

Шаг 9

Теперь перезагрузите сервер

service httpd restart

Шаг 10
тестирование
если вы добавите phpinfo() на каждый из сайтов index.php, вы заметите, что все версии PHP будут разными. также последняя версия test4.net по умолчанию будет использоваться для centos. Также обратите внимание, что test3.org и test4.net не являются.com, но все равно будут работать. В будущем я планирую составить руководство для файлов phpfarm, чтобы вы могли установить их с поддержкой mysql. Это была еще одна проблема, с которой я столкнулся. Если вы заметили некоторые ошибки в этом или затруднили его работу, прокомментируйте это, и я приеду к нему, как только смогу.

Ответы

Ответ 1

Несколько уведомлений от меня:

  1. yum install php php-cli mod_fastcgi. mod_php не должен быть включен. также mod_fastcgi можно установить без внешнего репозитория, используя mod_fcgid
  2. Для PHP 5.2 и libxml> = 1.2.9 вам необходимо применить этот патч libxml29_compat.patch
  3. для установки версии php для всего хоста без включенного mod_php добавьте это в httpd.conf

    <Directory "/var/www">
        Options All +ExecCGI
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin/php.fastcgi.5.5.18
    </Directory>
    
  4. при компиляции на 64-битных системах компиляция не выполняется из-за папки lib64, поэтому вы должны добавить --with-libdir=lib64 в configoptions