В той статье мы продемонстрируем решение для установки нескольких версий Phalcon и PHP и запустим их на одном веб-сервере. Здесь будут использоваться PHP 5.5.x и 5.6.x, но вы можете заменить их другими версиями. Можно использовать PHP-FPM, но мы рекомендуем использовать Nginx. В этом руководстве используется среда Fedora OS — система Linux, но инструкции практически идентичны для любой другой ОС * nix.
Предисловие
В этом руководстве рассматривается установка PHP 5.5.x с Phalcon 1.3.x и PHP 5.6.x с Phalcon 2.0.0. Мы также установим дополнительные PHP-расширения, такие как APC, memcache, memcached и ioncube.
Установка Nginx
Nginx — это доступный пакет в операционной системе Fedora, который мы можем установить следующим образом:
sudo yum install nginx
Затем мы создаем системные ссылки для запуска Nginx и запускаем его
sudo chkconfig nginx on sudo service nginx start
Сборка PHP
Прежде чем начинать установку PHP, нам необходимо установить зависимости для создания PHP5:
- Gcc или другой набор компиляторов.
- Libc-dev, предоставляет стандартную библиотеку C, включая заголовки.
- Make, инструмент использует управления сборкой, используемый PHP.
- Autoconf (2.59 или выше) для генерации скрипта configure.
- Automake (1.4 или выше), генерирует файлы Makefile.in.
- Libtool, помогает нам управлять общими библиотеками.
- Bison (2.4 или выше), для генерации парсера PHP.
- (Опционально) re2c, который используется для генерации лексера PHP. Поскольку репозиторий git уже содержит сгенерированный лексер, вам понадобится re2c только если вы хотите внести в него изменения.
На Centos / Fedora вы можете установить все это с помощью следующей команды:
sudo yum install gcc libxml2-devel libXpm-devel gmp-devel libicu-devel t1lib-devel aspell-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libvpx-devel libpng-devel freetype-devel readline-devel libtidy-devel libxslt-devel libmcrypt-devel pcre-devel curl-devel mysql-devel ncurses-devel gettext-devel net-snmp-devel libevent-devel libtool-ltdl-devel libc-client-devel postgresql-devel bison gcc make
Далее нам нужно получить исходный код. Существует два способа сделать это: вы можете загрузить архив со страницы загрузки PHP или клонировать git-репозиторий из Github .
Мы рекомендуем проверить исходный код в git, поскольку он предоставляет вам простой способ поддерживать актуальность вашей установки и пробовать ваш код с различными версиями. Git checkout также требуется, если вы хотите отправлять исправления или запрашивать запросы для PHP.
Чтобы клонировать репозиторий, выполните в терминале следующие команды:
sudo mkdir /opt/source && cd /opt/source git clone git@github.com:php/php-src.git && cd php-src
По умолчанию вы попадете на главную ветку, поэтому, если вы хотите перейти к версии разработки, вам нужно проверить стабильную ветку. Например.
PHP 5.3: git checkout PHP-5.3 PHP 5.4: git checkout PHP-5.4 PHP 5.6: git checkout PHP-5.6 PHP HEAD: git checkout master
Прежде чем перейти к отдельным этапам сборки, мы должны выполнить некоторые команды для «по умолчанию» сборки PHP. Это необходимо только для сборки из git.
sudo ./buildconf
./buildconf создает сценарий конфигурации. Это займет несколько минут.
На мой взгляд, лучше всего хранить весь веб-сервер в одном каталоге, поэтому я использую /opt здесь. Откройте терминал и введите следующую команду.
sudo mkdir -p /opt/php-5.6 sudo mkdir -p /opt/php-5.5
После ./configure сценария ./configure с помощью описанного выше шага вы можете использовать его для настройки сборки PHP. Вы можете просмотреть все поддерживаемые параметры, используя -help:
./configure --help
В приведенной выше команде будут перечислены различные общие параметры, которые поддерживаются всеми скриптами конфигурации на основе autoconf. Один из них уже упоминается -prefix = DIR, который меняет каталог установки, используемый командой make install . Другой полезной опцией является -C, которая кэширует результат различных тестов в файле config.cache и ускоряет ./configure вызовы ./configure . Использование этой опции имеет смысл только после того, как у вас уже есть рабочая сборка и вы хотите быстро переключаться между различными конфигурациями.
Вот несколько полезных параметров:
[...]
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
[...]
После завершения подготовки мы устанавливаем версию 5.6 PHP. Выполните следующее:
./configure \ --prefix=/opt/php-5.6 \ --with-pdo-pgsql \ --with-zlib-dir \ --with-freetype-dir \ --enable-mbstring \ --with-libxml-dir=/usr \ --enable-soap \ --enable-calendar \ --with-curl \ --with-mcrypt \ --with-zlib \ --with-gd \ --with-pgsql \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-zlib \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-pcntl \ --enable-mbregex \ --with-mhash \ --enable-zip \ --with-pcre-regex \ --with-mysql \ --with-pdo-mysql \ --with-mysqli \ --with-png-dir=/usr \ --enable-gd-native-ttf \ --with-openssl \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --with-libdir=lib64 \ --enable-ftp \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-gettext \ --with-gd \ --with-jpeg-dir=/usr/lib/ --enable-fpm
Последний переключатель (-enable-fpm) позволяет этой версии PHP работать с PHP-FPM. Если вы хотите использовать эту версию PHP-FPM с Apache, --with-fpm-user=apache и --with-fpm-group=apache . С другой стороны, если вы хотите использовать эту версию PHP-FPM с nginx, --with-fpm-user=nginx и --with-fpm-group=nginx .
Успешное сообщение должно быть в терминале:
[...] creating libtool appending configuration tag "CXX" to libtool Generating files configure: creating ./config.status creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. config.status: creating php5.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands
Теперь вы можете использовать make для выполнения фактической компиляции:
make
Основным результатом этой операции будут двоичные файлы PHP для включенных SAPI (по умолчанию sapi/cli/php и sapi/cgi/php-cgi), а также общие расширения в каталоге modules/.
Теперь вы можете запустить «make install» для установки PHP в /usr/local (по умолчанию) или в других каталогах, используя конфигурацию --prefix . В этом случае это /opt/php-5.6
sudo make install
Обратите внимание, что make install не будет создавать INI-файл.
/opt/php-5.6/bin/php --ini Configuration File (php.ini) Path: /opt/php-5.6/lib Loaded Configuration File: (none) Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
Скопируйте php.ini и php-fpm.conf в правильный каталог:
sudo cp /opt/source/php-src/php-fpm.conf.default /opt/php-5.6/etc/php-fpm.conf sudo cp /opt/source/php-src/php.ini-production /opt/php-5.6/lib/php.ini
Мы проверяем версию php еще раз.
/opt/php-5.6/bin/php --ini Configuration File (php.ini) Path: /opt/php-5.6/lib Loaded Configuration File: /opt/php-5.6/lib/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none) ### Checking php /opt/php-5.6/bin/php --version PHP 5.6.2-dev (cli) (built: Oct 2 2014 17:20:23) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
Откройте /opt/php-5.6/etc/php-fpm.conf и /opt/php-5.6/etc/php-fpm.conf . Вы должны переключиться на неиспользуемый порт (например, 9001, порт 9000 может использоваться Fedora)
vi /opt/php-5.6/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...] user = nginx group = nginx [...] listen = 127.0.0.1:9001 [...] #include=/opt/php-5.6/etc/pool.d/*.conf
Настройка сценария Init
Вероятно, вы захотите создать сценарий инициализации для вашего нового php-fpm. К счастью, PHP 5.3+ уже предоставляет его вам, просто скопируйте сценарий init в свой каталог и измените разрешения:
sudo cp /opt/source/php-src/sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm sudo chmod 755 /etc/init.d/php5.6-fpm
Ваш скрипт инициализации готов. Теперь вы можете запускать, останавливать и перезагружать php-fpm:
sudo /etc/init.d/php5.6-fpm start sudo /etc/init.d/php5.6-fpm stop sudo /etc/init.d/php5.6-fpm reload
Сборка второго PHP (5.5.x)
Открываем терминал и вводим следующую команду.
git checkout PHP-5.5 sudo ./buildconf ./configure \ --prefix=/opt/php-5.5 \ --with-pdo-pgsql \ --with-zlib-dir \ --with-freetype-dir \ --enable-mbstring \ --with-libxml-dir=/usr \ --enable-soap \ --enable-calendar \ --with-curl \ --with-mcrypt \ --with-zlib \ --with-gd \ --with-pgsql \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-zlib \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-pcntl \ --enable-mbregex \ --with-mhash \ --enable-zip \ --with-pcre-regex \ --with-mysql \ --with-pdo-mysql \ --with-mysqli \ --with-png-dir=/usr \ --enable-gd-native-ttf \ --with-openssl \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --with-libdir=lib64 \ --enable-ftp \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-gettext \ --with-gd \ --with-jpeg-dir=/usr/lib/ \ --enable-fpm make && sudo make install
Сборка расширений PHP Phalcon
Чтобы установить несколько версий Phalcon, включая Phalcon 2.0, нам нужно установить Zephir
git clone https://github.com/json-c/json-c.git cd json-c sh autogen.sh ./configure make && sudo make install git clone https://github.com/phalcon/zephir cd zephir sudo ./install -c
Существует множество способов установки расширений PHP. Мы будем использовать phpize.
Phpize играет ту же роль, что и скрипт ./buildconf для PHP: во-первых, он импортирует систему сборки PHP в ваше расширение путем копирования файлов из $PREFIX/lib/php/build . Среди этих файлов: acinclude.m4 (макросы PHP M4), phpize.m4 (который будет переименован в файл configure.in в вашем расширении и содержит основные инструкции по сборке) и run-tests.php .
Затем phpize вызовет autoconf для создания файла ./configure , который можно использовать для настройки сборки расширения. Например, для установки memcached вы должны добавить --enable-memcache .
Запомните! Вы должны указать параметр --with-php-config при создании расширений (если у вас не используется только одна глобальная установка PHP). В противном случае ./configure не сможет правильно определить версию PHP и флаги. Кроме того, скрипт php-config также гарантирует, что команда «make install» переместит сгенерированный *.so файл в нужный каталог расширения.
Создание первого PHP Phalcon (2.0)
git clone http://github.com/phalcon/cphalcon cd cphalcon && git checkout 2.0.0 zephir compile cd ext && /opt/php-5.6/bin/phpize ./configure --with-php-config=/opt/php-5.6/bin/php-config make && sudo make install Installing shared extensions: /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/
Проверьте, успешна ли сборка.
ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/
После установки расширения. Вам все равно нужно активировать его, включив его в файл php.ini.
sudo su echo "extension=phalcon.so" >> /opt/php-5.6/lib/php.ini exit
Сборка второго PHP Phalcon (1.3.x)
git clone http://github.com/phalcon/cphalcon cd cphalcon && git checkout master cd ext && /opt/php-5.5/bin/phpize ./configure --with-php-config=/opt/php-5.5/bin/php-config make && sudo make install Installing shared extensions: /opt/php-5.5/lib/php/extensions/no-debug-non-zts-20121212/
Мы снова проверяем, чтобы установка прошла успешно.
ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/ sudo su echo "extension=phalcon.so" >> /opt/php-5.5/lib/php.ini exit
Настройка Nginx
sudo vi /etc/nginx/nginx.conf
Следующая конфигурация создаст два сервера: phalcon-prd.localhost работает на PHP 5.5.x и phalcon-dev.localhost работает с PHP 5.6.x. Это пример, вы можете настроить для своего сервера
[...]
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
index index.php index.html index.htm;
#Prodution environment Phalcon
server {
listen 80;
server_name phalcon-prd.localhost;
root /usr/share/nginx/html/phalcon-prd;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#Development environment Phalcon
server {
listen 80;
server_name phalcon-dev.localhost;
root /usr/share/nginx/html/phalcon-prd;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
[...]
Настроить файл локальных хостов на своей машине для тестирования
Если вы используете систему Linux, вы можете отредактировать файл хоста:
sudo vi /etc/hosts
Новый файл хоста будет выглядеть так.
[...] 127.0.0 localhost phalcon-dev.localhost phalcon-prd.localhost ::1 localhost6.localdomain6 localhost6 [...]
Это нужно для перехвата всех запросов phalcon-dev.localhost и phalcon-prd.localhost а затем phalcon-prd.localhost передает их на ваш сервер.
Тестирование
Для тестирования мы создаем новый файл с именем test.php и помещаем его в папку, соответствующую указанной выше конфигурации Nginx. В каждый файл добавляется следующая команда.
<?php phpinfo(); ?>
Теперь, запустив файл test.php на каждом сервере, мы видим phalcon 1.3.x phpinfo() по адресу http: //phancon-prd.localhost/test.php, а в http: //phancon-dev.localhost/test. Php должен быть phpinfo() Phalcon 2.0.x.

В заключение
В этом уроке мы узнали, как мы можем легко установить и использовать несколько активно работающих версий PHP на нашем сервере, каждый с собственным набором различных расширений, если это необходимо. Это может пригодиться для шаред хостинга или если вам нужно поддерживать старые приложения, например, при разработке и развертывании на самых современных версиях.
Нужна установка нескольких версий php на сервер, обращайтесь office@itfb.com.ua