Установка PHP 5.6 в Ubuntu 16.04

Дата: 22.06.2017Метки: ,

В Ubuntu 16.04 Xenial уже давно из репозитория убрали PHP 5.6 и вместо него по умолчанию устанавливается новая версия PHP 7.0. Но как быть тем, кто по той или иной причине не может перейти на новую версию? В этом случае, если вы хотите использовать PHP 5.6 вам необходимо предварительно добавить репозиторий для старой версии.

Добавим ppa-репозиторий в систему:

sudo add-apt-repository ppa:ondrej/php
upt-get update

Далее запускаем установку PHP 5.6 и дополнительно указываем необходимые модули:

sudo apt-get install php5.6-mbstring php5.6-mysql php5.6-gd php5.6-xml

Установка ionCube Loader в Ubuntu 16.04

IonCube — расширение модуля PHP, которое загружает зашифрованные файлы PHP и ускоряет выполнение PHP-скриптов. Для установки ionCube необходимо прописать соответствующий модуль в файл конфигурации php.ini. Краткий мануал по установке ionCube Loader в Ubuntu 16.04. Предварительно система подготовлена следующим образом. На сервер автоматически установлен PHP 7 вместе с установкой панели Vesta.

Скачиваем последнюю версию Ioncube Loader для системы 64-bit:

cd /tmp
wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

Или Ioncube Loader для системы 32-bit:

cd /tmp
wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz

Распаковываем:

tar xfz ioncube_loaders_lin_x86.tar.gz

Что бы определить расположение файла php.ini выполните команду:

php --ini |grep Loaded
Loaded Configuration File:         /etc/php/7.0/cli/php.ini

Следует отметить что путь будет указан для php-cli, каталог для php.ini модуля php-fpm должен быть на уровень выше.

Выясним расположение каталога модулей PHP:

# php -i |grep extension_dir
extension_dir => /usr/lib/php/20151012 => /usr/lib/php/20151012

Копируем модуль Ioncube Loader в каталог с расширениями:

cd /tmp/ioncube
cp ioncube_loader_lin_7.0.so /usr/lib/php/20151012

Добавим загрузку модуля в файл php.ini. Откройте файл:

nano /etc/php.ini

И добавьте в его начало следующую строку:

zend_extension = "/usr/lib/php/20151012/ioncube_loader_lin_7.0.so"

Следует отметить, что указанный мной путь выше, может отличаться от вашего расположение файла.

Перезапустим php-fpm или apache:

service restart apache2
service restart php-fpm

Если все сделали правильно, то вы должны увидеть следующий результат выполнения команды:

# php -v
PHP 7.0.15-0ubuntu0.16.04.4 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v6.0.8, Copyright (c) 2002-2015, by ionCube Ltd.

Сборка PHP7 для PrestaShop 1.7

Ранее я уже писал о сборке PHP7 из исходников. Предыдущая статья была написана в качестве примера, в ней я использовал набор параметров PHP, который необходим для работы блога WordPress. Изначально я отключил все неиспользуемые модули, поэтому теперь возникла необходимость заставить работать PrestaShop 1.7 на PHP7.

Я предпочитаю сразу отключать все лишнее. Указанные мною параметры — это минимальный набор модулей PHP7, который необходим для установки PrestaShop 1.7. Используйте статью по ссылке выше в качестве исходного материала. За исключением того, что вам необходимо указать следующие параметры сборки:

CONFIGURE_STRING="--prefix=/usr/local/php7-fpm \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-mcrypt \
--enable-intl \
--enable-zip \
--enable-mysqlnd \
--enable-mbstring \
--enable-sockets \
--disable-cgi \
--disable-phar \
--with-config-file-scan-dir=/usr/local/php7-fpm/etc/conf.d \
--with-curl \
--with-gd \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-mysqli \
--with-pdo-mysql \
--with-openssl \
--with-zlib \
--without-sqlite3 \
--without-pdo-sqlite"

После добавление новых модулей потребовалась установить дополнительные пакеты, необходимые для сборки. В противном случае, после работы команды configure вы можете получить следующие ошибки:

configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
configure: error: mcrypt.h not found. Please reinstall libmcrypt.

Проблему легко устранить, выполнив установку следующих пакетов:

apt-get install libicu-dev libmcrypt-dev

Дополнительно на сервере где будет работать PHP7 нужно установить пакет:

apt-get install mcrypt

Установка PHP7 и Apache2 в Debian 8

Дата: 21.06.2016Метки: ,

Много лет назад, когда еще не было Nginx, в мире интернета де-факто стандартом была связка из PHP и Apache. В те времена не было ни Amazon Web Services, Azure, Cloud Platform и прочих облачных систем. А VPS хостинг только начинал набирать популярность. Как правило, виртуальные машины стоили дорого и имели очень мало оперативной памяти. На моем первом VPS c Jail мне приходилось бороться за каждый мегабайт оперативной памяти. Даже после отключения всех неиспользуемых модулей Apache и прочей оптимизации, VPS периодически не справлялся с нагрузкой.

Сегодня я всеми путями пытаюсь отказаться от использования Apache. Но бывают ситуации, когда по той или иной причине приходится использовать Apache2. В данной записи я расскажу о установке связки из PHP7 и Apache2. Для установки свежей версии PHP7 я буду использовать репозиторий Dotdeb.

Для начала обновим локальный кеш пакетов и обновим нашу систему:

apt-get update && apt-get dist-upgrade

Выполните команду ниже для того чтобы установить Apache2:

apt-get install apache2

Для установки PHP7 для начала нам необходимо добавить репозиторий Dotdeb. Откройте файл:

nano /etc/apt/sources.list

Добавьте в конец файла две строки:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Скачиваем и устанавливаем ключ:

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Обновляем локальный кеш пакетов:

apt-get update

Список доступных пакетов для установки:

# apt-cache search php7
libapache2-mod-php7.0 - server-side, HTML-embedded scripting language (Apache 2 module)
libphp7.0-embed - HTML-embedded scripting language (Embedded SAPI library)
php-all-dev - package depending on all supported PHP development packages
php7.0 - server-side, HTML-embedded scripting language (metapackage)
php7.0-apcu - APC User Cache for PHP
php7.0-apcu-bc - APCu Backwards Compatibility Module
php7.0-bz2 - bzip2 module for PHP
php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-common - Common files for packages built from the PHP source
php7.0-curl - CURL module for PHP
php7.0-dbg - Debug symbols for PHP7.0
php7.0-dev - Files for PHP7.0 module development
php7.0-enchant - Enchant module for PHP
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-gd - GD module for PHP
php7.0-geoip - GeoIP module for PHP
php7.0-gmp - GMP module for PHP
php7.0-igbinary - igbinary serializer for PHP
php7.0-imagick - Provides a wrapper to the ImageMagick library
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-json - JSON module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-memcached - memcached extension module for PHP, uses libmemcached
php7.0-mongodb - MongoDB driver for PHP
php7.0-msgpack - MessagePack serializer for PHP
php7.0-mysql - MySQL module for PHP
php7.0-odbc - ODBC module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-pgsql - PostgreSQL module for PHP
php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.0-pspell - pspell module for PHP
php7.0-readline - readline module for PHP
php7.0-recode - recode module for PHP
php7.0-redis - PHP extension for interfacing with Redis
php7.0-snmp - SNMP module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-ssh2 - Bindings for the libssh2 library
php7.0-sybase - Sybase module for PHP
php7.0-tidy - tidy module for PHP
php7.0-xdebug - Xdebug Module for PHP
php7.0-xmlrpc - XMLRPC-EPI module for PHP
php7.0-xsl - XSL module for PHP

Запускаем установку PHP7:

apt-get install php7.0 php-pear

Перезапустим Apache2:

service apache2 restart

Файл конфигурации виртуального хоста находятся в файле:

nano /etc/apache2/sites-enabled/000-default.conf

Находим директиву DocumentRoot:

DocumentRoot /var/www/html

И в корне указанного каталога создаем файл, который выведет информацию о PHP7:

nano /var/www/html/info.php

Добавьте в файл следующие строки:

<?php phpinfo();
?>

Открываем страницу в браузере:

http://exemple.com/info.php

Если открылась страница с конфигурацией PHP7, то вы все сделали правильно.

Primary script unknown while reading response header from upstream

Дата: 17.02.2016Метки:

Собирал на днях PHP 7 для своего VPS, на котором крутится этот блог. Ради интереса решил провести небольшой эксперимент и максимально отключить все неиспользуемые WordPress компоненты PHP. В процессе сборки я стараюсь всегда отключать все неиспользуемые модули. В этот раз решил дополнительно указал параметры, которые ранее никогда не использовал:

--disable-fileinfo
--disable-json
--disable-posix

После того как я запустил процесс php-fpm, я обнаружил, что сайт не работает. Не могу сказать, что я был сильно удивлен, поэтому решил сразу проверить логи nginx. В логах повторялась следующая ошибка:

"Primary script unknown" while reading response header from upstream.

Благо эту напасть удалось быстро победить. Для того чтобы завести PHP, необходимо указать в секции location ~ \.php$ директорию root, которая будет указывать на расположение файлов php. Если вы столкнулись с подобной ошибкой, убедитесь что в конфиге виртуального хоста nginx присутствуют следующие директивы:

location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    ...
}

Установка PHP 7 в Ubuntu

Дата: 24.01.2016Метки: ,

В этой статье я опишу процесс установка PHP 7 в Ubuntu из PPA-репозитория. Эта заметка будет написана в формате небольшого мануала, поэтому я постараюсь кратко изложить техническую техническую сторону процесса. Дополнительно, в предыдущих моих постах вы можете прочить как установить PHP 7 в Debian и CentOS. А еще есть описание процесса установки PHP 7 из исходников в Debian, это вариант более трудоемкий, но зато имеет очевидные преимущества с точки зрения оптимизации.

Установка PHP 7 в Ubuntu

На данный момент PHP 7 официально не доступен для установки в Ubuntu. Но мы можем установить PHP 7 в Ubuntu используя PPA — персональный репозиторий apt, размещенный на сайте Launchpad. С помощью PPA сторонние разработчики имеют возможность создавать и распространять пакеты для Ubuntu за пределами официальных каналов.

С помощью команды ниже добавьте репозиторий PHP 7 в Ubuntu:

add-apt-repository ppa:ondrej/php

После установки PPA, обновите локальный кэш пакетов:

apt-get update

Теперь у нас есть доступ к новым пакетам, мы можем выполнить установку PHP 7 в Ubuntu. В этой статье я опишу процесс настройки PHP 7 для использования его в связке с веб-сервером Nginx. Для этого нам потребуется установить PHP-FPM:

apt-get install php7.0-fpm

Если ваше скрипты используют в процессе работы MySQL, выполните команду:

apt-get install php7.0-mysql

Настройка PHP 7 для работы с Nginx

Процессы PHP 7 и Nginx взаимодействуют между собой с помощью unix-сокета. По умолчанию в PHP 7 unix-сокет имеет следующее расположение:

/var/run/php/php7.0-fpm.sock

Откройте конфигурационный файл default в текстовом редакторе nano:

nano /etc/nginx/sites-enabled/default

Полностью удалите все содержимое файла default, а заетем скопируйте строки из примера ниже:

server {
    listen 80 default_server;

    root /var/www/html;
    index index.php index.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Закройте файл и сохраните изменения. Чтобы использовать новые настройки необходимо перезапустить Nginx:

nginx -t
service nginx restart

Проверка работы PHP 7

Чтобы проверить правильность установки и настройки PHP 7 в Ubuntu, в коневом каталоге сайта создайте файл:

nano /var/www/html/info.php

Следующего содержания:

<?php
phpinfo();
?>

Откройте файл в вашем браузере:

http://server_ip/info.php

Если вы правильно установили и настроили PHP 7 в Ubuntu, вы должны увидеть страницу содержащую информацию о его конфигурации.

Установка PHP 7 в CentOS 7

Дата: 22.01.2016Метки: ,

В данной статье я расскажу о установке PHP 7, выпуск финальной версии которого стал одним из важнейших событий прошедшего года. Команда разработчиков выполнила просто огромную работу, судя по тестам, производительность PHP 7 вплотную приблизилась к показателям конкурента HHVM. Следует отметить, что рост производительности был достигнуть за счет оптимизации и никак не повлиял на увеличение потребления ресурсов.

Если сравнивать с предыдущей версией, то по моему мнению, PHP 7 абсолютно лишен недостатков. Исходя из имеющейся информации, можно сделать прогноз, что темпы перехода на PHP 7 будут достаточно быстрыми. Ранее я уже описывал процесс установки PHP 7 из исходников или репозитория Debian, в этой записи я расскажу как быстро установить PHP 7 в Cent OS 7.

На данный момент в официальном репозитории Cent OS 7 отсутствуют пакеты для установки PHP 7. Связи с чем, стоит немного повременить с переводом на PHP 7 серьезных коммерческих проектов. Зато будет не лишним установить PHP 7 на тестовый серевер, чтобы заранее проверить совместимость приложений и ознакомиться с новыми возможностями языка PHP 7.

В этой записи я опишу свой опыт установки PHP 7 для использования его в сочетании с веб-сервером Nginx. Для установки я использовал систему CentOS 7.1 и пакеты PHP 7 из неофициального репозитория IUS.

Установка PHP 7 в Cent OS 7

Перед установкой PHP 7 нам необходимо подключить к Cent OS репозиторий IUS. Для этого нам необходимо загрузить и выполнить специальный скрипт, после его запуска репозиторий IUS будет автоматически добавлен в систему.

Переходим в каталог tmp и загружаем скрипт на сервер:

cd /tmp
curl 'https://setup.ius.io/' -o setup-ius.sh

Затем выполните скрипт командой:

bash setup-ius.sh

Если на сервере присутствует PHP, удалите все установленные пакеты. Для первой установки PHP 7 на сервере, следующий пункт нужно пропустить.

yum remove php-fpm php-cli php-common

Чтобы установить PHP 7 и модули php-fpm, php-mysqlnd, выполните команду:

yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

Я установил PHP 7 с минимальным набором модулей. В дальнейшем вы можете установить дополнительные модули по своему усмотрению. Если у вас процесс установки прошел без ошибок — я вас поздравляю. У меня же первый блин был комом, с первой попытки установить PHP 7 в CentOS мне не удалось. Подробнее описание решения проблемы вы можете прочитать в конце статьи.

Настройка PHP 7 для работы с Nginx

После завершения установки PHP 7, нам нужно внести изменения в конфигурацию PHP-FPM и Nginx. По умолчанию в PHP 7 для соединений использует локальный TCP-порт. Общеизвестным фактом является то, что для лучшего быстродействия PHP-FPM и Nginx желательно использовать Unix-сокет.

Используя PHP-FPM можно обрабатывать несколько пулов дочерних процессов. По умолчанию в PHP 7 сконфигурирован на использование одного общего пула WWW. Его настройки хранятся в файле /etc/php-fpm.d/www.conf. Откройте этот файл в текстовом редакторе:

nano /etc/php-fpm.d/www.conf

Закомментируйте строку listen = 127.0.0.1:9000, она отвечает за работу PHP-FPM через порт 9000. Вместо нее раскомментируйте строку listen = /run/php-fpm/www.sock расположенную ниже.

;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

Затем найдите блок listen.acl_users и раскомментируйте в нем строку listen.acl_users = nginx.

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

Закройте файл и сохраните изменения. Теперь нам необходимо изменить конфигурацию Nginx, для того чтобы веб-сервер использовал сокет во время взаимодействия с PHP-FPM. Откройте файл:

nano /etc/nginx/conf.d/php-fpm.conf

Нам необходимо переключить способ взаимодействия Nginx и PHP-FPM с tcp-порта 9000 на использование сокета. Для этого измените содержимое файла следующим образом:

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

Закройте файл и сохраните изменения. Чтобы новые директивы вступили в силу нам необходимо перезапустить PHP-FPM и Nginx:

systemctl restart php-fpm
systemctl restart nginx

Вы можете проверить статус каждого сервиса, используя systemctl:

systemctl status php-fpm
systemctl status nginx

Проверка работы PHP 7

После того как мы установили PHP 7 и подготовили к работе веб-сервер Nginx, необходимо убедится, что все настроено правильно. Начните с проверки версии PHP, для этого выполните команду:

# php -v
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

Затем создадим в корневом каталоге веб-сервера файл info.php:

nano /usr/share/nginx/html/info.php

Скопируйте в файл следующий код:

<?php
phpinfo();

Закройте файл и сохраните изменения. Введите в браузере ip-адрес или доменное имя вашего сервера и укажите название файла info.php:

http://server_ip/info.php

Если вы правильно установили и настроили PHP 7 в CentOS, вы должны увидеть страницу содержащую информацию о конфигурации PHP 7.

Проблемы во время установки PHP 7

Далее я расскажу о небольшой проблеме, с которой я столкнулся во время установки PHP 7 на CentOS 7.1.

Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius)
           Requires: libsystemd.so.0()(64bit)
Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius)
           Requires: libsystemd.so.0(LIBSYSTEMD_209)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Очень часто хостеры вносят свои изменения в шаблоны контейнеров виртуальных машин. В моем случае, проблема была вызвана тем, что CentOS 7 использовала кривые зеркала centos-base и testing репозиториев. Для тех, кто столкнулся с подобной проблемой, откройте файл:

nano /etc/yum.repos.d/CentOS-Base.repo

Чтобы устанавливать пакеты из официальных репозиториев CentOS 7, используйте конфигурацию ниже:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Скрыть версию PHP и Nginx

Дата: 09.01.2016Метки: ,

Если просмотреть заголовок ответа веб-сервера, можно получить информацию о используемой версии PHP и Nginx на сервере. В случае регулярных обновлений информация не представляет серьезной опасности. Тем не менее, если есть такая возможность, лучше лишний раз перестраховаться и предусмотрительно скрыть версию PHP и Nginx от любопытных глаз.

Для примера с помощью этого сервиса я получил заголовок ответа веб-сервера для первого попавшегося сайта:

Server: nginx/1.9.5
Content-Type: text/html; charset="UTF-8"
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Set-Cookie: PHPSESSID=bsi4talrrugln1btgfen1mjmj3;
expires="Sun, 08-Jan-2017 19:27:38 GMT"; Max-Age=31536000;
path=/
Cache-Control: no-cache
Date: Sat, 09 Jan 2016 19:27:38 GMT
Content-Encoding: gzip

Как видите, мы без особого труда можем точно установить используемую версию PHP, Nginx, название и версию установленной операционной системы.

Чтобы скрыть версию PHP, измените значение параметра expose_php в файле php.ini:

expose_php = off

Чтобы скрыть версию Nginx, необходимо добавить в секцию http следующий параметр:

server_tokens off;

Не забудьте перезапустить PHP и Nginx, для того чтобы изменения вступили в силу.

Установка PHP 7 с Dotdeb

Дата: 08.12.2015Метки: ,

Буквально на днях в репозиториях Dotdeb появился пакет финальной версии PHP 7. Многие жалуются на Dotdeb, но у меня никогда проблем с пакетами установленными из Dotdeb не возникало. В этой записи я опишу установку PHP7 в связке с Nginx. Вы можете ознакомится с информацией о установке PHP7 для Apache2 в следующей моей записи.

Для установки PHP 7 в Debian сначала необходимо добавить репозиторий в систему. Для этого откройте файл:

/etc/apt/sources.list

Затем добавьте в него следующие строки:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Скачиваем и устанавливаем ключ GnuPG:

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Выполните команду:

apt-get update

Установить PHP 7:

apt-get install php7.0-fpm

Для управления PHP 7, используем команды:

service php7.0-fpm start
service php7.0-fpm stop
service php7.0-fpm restart

Установка PHP 7 в Debian 8

Дата: 08.12.2015Метки: ,

Совсем недавно вышла финальная версия PHP 7.0.0, а это значит, что разработка достигла своего финала и пора обновить инструкцию по установке PHP 7 в Debian. Процесс сборки PHP 7 выполнялся из исходников под OS Debian 8.

Перед началом компиляции, вы можете добавить или удалить модули из сборки PHP 7. В этой статье я использую минимальный набор модулей, который необходим для нормального функционирования WordPress. Дополнительно я опишу процесс добавления модулей, которые не входят в PHP 7 по умолчанию.

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

Для начала установим все необходимые для сборки и работы PHP 7 зависимости:

apt-get install build-essential autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config libpng-dev libxml2-dev libxml2 libcurl3

Указанные выше зависимости составлены исходя из указанных мной модулей PHP 7. Если вы хотите добавить другие модули, возможно, понадобиться дополнительно установить необходимые для сборки пакеты. Иначе в процессе выполнения команды ./configure вы получите ошибку.

Установка PHP 7

Все действия будем выполнять в директории:

cd /usr/src

Скачиваем и распаковываем исходники PHP 7.0.4:

wget http://de1.php.net/get/php-7.0.4.tar.bz2/from/this/mirror -O php-7.0.4.tar.bz2
tar -xvjf php-7.0.4.tar.bz2

Если на момент чтения этой статьи, уже вышла более свежая версия PHP 7, скачайте самостоятельно исходники с официального сайта.

Переходим в каталог с исходниками PHP 7:

cd php-7.0.4

Для того чтобы установить PHP 7, нам необходимо выполнить компиляцию из исходников. Перед тем как начать, добавьте или удалите неиспользуемые модули из состава PHP 7 и укажите параметры сборки.

./buildconf --force

CONFIGURE_STRING="--prefix=/usr/local/php-fpm 
--enable-fpm
--enable-mysqlnd
--enable-mbstring
--disable-pdo
--disable-phar
--with-config-file-scan-dir=/usr/local/php-fpm/etc/conf.d
--with-curl
--with-gd
--with-fpm-user=www-data
--with-fpm-group=www-data
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysqli=mysqlnd
--with-zlib
--without-sqlite3
--without-pdo-sqlite"

Если вы планируете использовать на вашем сервере Apache, к указанным выше параметрам необходимо добавить:

--with-apxs2

Данная конфигурация проверена мной и протестирована на WordPress 4.4.2 с минимальным набором плагинов. Если вы хотите добавить в PHP 7 другие модули, найдите их в списке доступных параметров сборки:

./configure --help

Для компиляции и установки PHP 7, необходимо выполнить команду:

./configure $CONFIGURE_STRING
make && make install

Настройка PHP 7

Если в процессе компиляции не было ошибок, файлы PHP 7 должны быть расположены в директории:

/usr/local/php-fpm

Нам осталось внести изменения в конфигурационный файлы и добавить PHP 7 в автозагрузку. Для начала скопируем файл php.ini из каталога с исходниками в каталог установки PHP 7:

cp /usr/src/php-7.0.4/php.ini-production /usr/local/php-fpm/lib/php.ini

Чтобы включить модуль Zend OPcache, создайте файл:

mkdir -p /usr/local/php-fpm/etc/conf.d/
nano /usr/local/php-fpm/etc/conf.d/modules.ini

Скопируйте в него следующие параметры:

# Zend OPcache
zend_extension=opcache.so

Для настройки работы PHP-FPM создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.conf

И добавьте в него следующие параметры:

[global]

pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log

include=/usr/local/php-fpm/etc/php-fpm.d/*.conf

Затем создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.d/www.conf

И добавьте в него параметры:

[www]
user = www-data
group = www-data

listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0777

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Добавим PHP 7 в автозагрузку, создадим символическую ссылку на файл php-fpm:

ln -s /usr/local/php-fpm/sbin/php-fpm /usr/local/php-fpm/sbin/php7-fpm

Я предпочитаю запускать все процессы через systemd. Создадим новый юнит:

nano /etc/systemd/system/php-fpm/php-fpm.service

Добавим в содержимое файла:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php-fpm/var/run/php-fpm.pid
ExecStart=/usr/local/php-fpm/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php-fpm/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Включаем, запускаем и смотрим статус юнита:

systemctl enable php-fpm
systemctl start php-fpm
systemctl -l status php-fpm

Если есть ошибки — читаем вывод в статусе, исправляем. После исправлений в юните нужно перегружать демон systemd.

Альтернативный метод запуска php_fpm. Менее надежен, если процесс упадет, то восстановить его работу необходимо будет вручную. Пропускаем этот этап, если ранее настроили запуск PHP через systemd. Создадим в каталоге init.d скрипт для запуска PHP-FPM:

nano /etc/init.d/php-fpm

Добавьте в содержимое файла:

Дадим права на запуск, добавим скрипт в автозагрузку:

chmod +x /etc/init.d/php-fpm
update-rc.d php-fpm defaults

Затем необходимо выполнить команду:

service php-fpm restart

Для работы PHP-FPM в Nginx, добавьте в секцию server виртуального хоста:

location ~ .php$ {
    try_files $uri = 404;
    fastcgi_pass unix:/var/run/php-fpm7.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Проблемы в процессе установки PHP 7

Список ошибок, который может возникнуть по причине отсутствия установленных зависимостей.

./buildconf: 46: ./buildconf: make: not found

# Выполните установку:
apt-get install build-essential
buildconf: autoconf not found.
           You need autoconf version 2.59 or newer installed
           to build PHP from Git.
build/build.mk:37: recipe for target 'buildmk.stamp' failed

# Выполните установку:
apt-get install autoconf
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

# Выполните установку:
apt-get install re2c
configure: error: bison is required to build PHP/Zend when building a GIT checkout!

# Выполните установку:
apt-get install bison
configure: error: Cannot find OpenSSL's 

# Выполните установку:
apt-get install libssl-dev libcurl4-openssl-dev pkg-config
configure: error: png.h not found.

# Выполните установку:
libpng-dev
configure: error: xml2-config not found. Please check your libxml2 installation.

# Выполните установку:
apt-get install libxml2 libxml2-dev