В той статье мы продемонстрируем решение для установки нескольких версий 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 [email protected]: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 на сервер, обращайтесь [email protected]