Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Sat, 26 Oct 2019 20:14:35 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/ https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/#respond Fri, 08 Dec 2017 20:58:39 +0000 http://linux-notes.org/?p=5665 Ошибки работы с PHP сессиями в Unix/Linux Хочу описать статью с возможными ошибками работы PHP и сессиями в Unix/Linux. Думаю многие сталкиваются и будет полезно знать как решать ту, или иную ошибку. Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел: 2017/12/08 21:15:48 [error] 40014#40014: *395 FastCGI sent in stderr: "PHP message: […]

The post Ошибки работы с PHP сессиями в Unix/Linux first appeared on linux-notes.org.]]>

Ошибки работы с PHP сессиями в Unix/Linux

Хочу описать статью с возможными ошибками работы PHP и сессиями в Unix/Linux. Думаю многие сталкиваются и будет полезно знать как решать ту, или иную ошибку.

Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел:

2017/12/08 21:15:48 [error] 40014#40014: *395 FastCGI sent in stderr: "PHP message: PHP Warning:  require_once(/etc/zabbix/web/maintenance.inc.php): failed to open stream: Permission denied in /usr/share/zabbix/include/classes/core/ZBase.php on line 269

-=== Ошибка 1 ===-

Можно увидить следующую ошибку:

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

Возникла у меня при установке phpmyadmin.

Так же, если имеется cPanel, может возникнуть такая же ошибка, я описывал решение в моей статье:

ошибка в phpMyAdmin «Cannot start session without errors»

-=== Ошибка 2 ===-

При работе с апачем, я получил:

Warning: session_start() [function.session-start]: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in /var/www/vhosts/httpdocs/index.php on line 6
Warning: Unknown: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0

-=== Ошибка 3 ===-

Получил еще ошибку:

FastCGI sent in stderr: “PHP message: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0” while reading upstream, client: 37.***.***.56, server: rtfm.co.ua, request: “POST /wp-admin/admin-ajax.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9009”, host: “rtfm.co.ua”, referrer: “http://linux-notes.org/wp-admin/post.php?post=5496&action=edit&message=10”

Другие ошибки я буду добавлять по мере их возникновения.

Решения ошибок работы с PHP сессиями в Unix/Linux

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

$ php -i |grep save_path

session.save_path => /var/lib/php/session => /var/lib/php/session

Как видно у меня этот путь рассположен в /var/lib/php/session директории.

Проверим права на данную директорию:

# ls -alh /var/lib/php/session

Смотрим от какого юзера идет выполнение php кода:

# ps aux |grep php-fpm

PS: Или, можно зайти в ваш пул php-fpm и найти пользователя от которого он запущен!

Решение довольно примитивное. Для начала, стоит создать папку под использующие сессии (если ее нет еще) и выставить права:

# mkdir /var/lib/php/session
# chmod 1777 /var/lib/php/session

И так же, выставляем владельца и группу:

# chown root:www /var/lib/php/session
# chown -R www: /var/cache/nginx

ИЛИ:

# chmod o+rw /var/lib/php/session

Потом, открываем ваш php.ini и находим строку:

;session.save_path = "/tmp"

И нужно выполнить расскоменчивание данной строки.

PS: Возможно, нужно будет выставить права и владельца!

Если вы используете выделенные пулы под свои php- проекты, то стоит поискать данную строку в:

# grep -lR 'php_value' /etc/php-fpm.d

Если покажет файлы, то стоит посмотреть привести к:

[...]
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
[...]

Перезапускаем php-fpm службу:

# service php-fpm restart

Для апача, следуюет указать следующие строки:

php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"

а поиск файла можно сделать так:

# grep -lR 'php_value' /etc/

И тоже, выполнить перезапуск службы:

# service httpd restart

Вот и все решение! А у меня на этом статья «Ошибки работы с PHP сессиями в Unix/Linux» завершена.

The post Ошибки работы с PHP сессиями в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phpdox-v-unix-linux/ https://linux-notes.org/ustanovka-phpdox-v-unix-linux/#respond Thu, 30 Mar 2017 20:00:41 +0000 http://linux-notes.org/?p=12168 Установка PhpDox в Unix/Linux phpDox — является генератором документации для PHP проектов. Он включает, но не ограничивается в API документации. Установка PhpDox в Unix/Linux -=== Использование PHAR файла===- Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке: $ wget https://github.com/theseer/phpdox/releases/download/0.9.0/phpdox-0.9.0.phar && chmod +x phpdox-0.9.0.phar && sudo mv phpdox-0.9.0.phar /usr/bin/phpdox  -=== Использование github===- $ […]

The post Установка PhpDox в Unix/Linux first appeared on linux-notes.org.]]>

Установка PhpDox в Unix/Linux

phpDox — является генератором документации для PHP проектов. Он включает, но не ограничивается в API документации.

Установка PhpDox в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget https://github.com/theseer/phpdox/releases/download/0.9.0/phpdox-0.9.0.phar && chmod +x phpdox-0.9.0.phar && sudo mv phpdox-0.9.0.phar /usr/bin/phpdox

 -=== Использование github===-

$ git clone git://github.com/theseer/phpdox.git

После чего выполним установку composer:

$ composer install

Использование PhpDox в Unix/Linux

Чтобы проверить версию phpdox, выполните:

$ phpdox --version

Если все работает корректно, вы должны получить такой результат:

phpDox 0.9.0 - Copyright (C) 2010 - 2016 by Arne Blankerts

Вот и все, тема «Установка PhpDox в Unix/Linux» завершена.

The post Установка PhpDox в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phpdox-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/ https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/#respond Thu, 30 Mar 2017 19:45:13 +0000 http://linux-notes.org/?p=12166 Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux phpcpd — это детектор копирования / вставки (CPD) для PHP-кода. Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux -=== Использование PHAR файла===- Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке: $ wget https://phar.phpunit.de/phpcpd.phar && chmod +x phpcpd.phar && mv phpcpd.phar /usr/local/bin/phpcpd Вы также можете […]

The post Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux

phpcpd — это детектор копирования / вставки (CPD) для PHP-кода.

Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget https://phar.phpunit.de/phpcpd.phar && chmod +x phpcpd.phar && mv phpcpd.phar /usr/local/bin/phpcpd

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phpcpd.phar
$ php phpcpd.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev sebastian/phpcpd

Затем вы можете вызвать его, используя vendor/bin/phpcpd.

 -=== Использование github===-

$ git clone https://github.com/sebastianbergmann/phpcpd.git

В папке найти и использовать данную утилиту.

А на этом, статья «Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux» завершена.

The post Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/ https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/#respond Thu, 30 Mar 2017 17:35:39 +0000 http://linux-notes.org/?p=12159 Установка PHP Mess Detector (PHPMD) в Unix/Linux PHPMD — является молодым проектом, поэтому он предоставляет только ограниченный набор предварительно определенных правил по сравнению с его братом PMD, который обнаруживает «запахи кода» и возможные ошибки в анализируемом исходном коде. Что делает PHPMD: Он берет исходный PHP код и ищет несколько потенциальных проблем внутри этого источника. Эти проблемы […]

The post Установка PHP Mess Detector (PHPMD) в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP Mess Detector (PHPMD) в Unix/Linux

PHPMD — является молодым проектом, поэтому он предоставляет только ограниченный набор предварительно определенных правил по сравнению с его братом PMD, который обнаруживает «запахи кода» и возможные ошибки в анализируемом исходном коде.

Что делает PHPMD: Он берет исходный PHP код и ищет несколько потенциальных проблем внутри этого источника. Эти проблемы могут быть такими:

  • Возможные ошибки
  • Субоптимальный код
  • Сложные выражения
  • Неиспользуемые параметры, методы, свойства

Установка PHP Mess Detector (PHPMD) в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget -c http://static.phpmd.org/php/latest/phpmd.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev phpmd/phpmd

Или, альтернативно, включите зависимость в composer.json файле. Для примера:

{
"require-dev": {
"phpmd/phpmd" : "@stable"
}
}

 -=== Использование github===-

Если вы хотите выполнить установку через GitHub, вы можете использовать зеркало PHPMD:

$ git clone git://github.com/phpmd/phpmd.git

Перейдем в папку и инициализируем все дочерние модули:

$ cd phpmd
$ git submodule update --init

Как-то так. У меня с темой «Установка PHP Mess Detector (PHPMD) в Unix/Linux» все.

The post Установка PHP Mess Detector (PHPMD) в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php_depend-v-unix-linux/ https://linux-notes.org/ustanovka-php_depend-v-unix-linux/#respond Thu, 30 Mar 2017 01:17:06 +0000 http://linux-notes.org/?p=12160 Установка PHP_Depend в Unix/Linux PHP_Depend — это анализатор программного обеспечения, который так же показывает полезные метрики. Установка PHP_Depend в Unix/Linux -===Скачиваем файл===- $ wget http://static.pdepend.org/php/latest/pdepend.phar && sudo chmod +x pdepend.phar && sudo mv pdepend.phar /usr/local/bin/pdepend -===Используем composer===- Для начала, выполним установку самого composer: Установить PHP Composer в Unix/Linux После установки, выполняем установку: $ composer require --dev pdepend/pdepend […]

The post Установка PHP_Depend в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP_Depend в Unix/Linux

PHP_Depend — это анализатор программного обеспечения, который так же показывает полезные метрики.

Установка PHP_Depend в Unix/Linux

-===Скачиваем файл===-

$ wget http://static.pdepend.org/php/latest/pdepend.phar && sudo chmod +x pdepend.phar && sudo mv pdepend.phar /usr/local/bin/pdepend

-===Используем composer===-

Для начала, выполним установку самого composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev pdepend/pdepend

Или вы можете использовать composer, просто добавив PHP_Depend зависимость в вш composer.json файл:

{
"require": {

"pdepend/pdepend" : "2.5.0"
}
}

-===Используем git===-

$ git clone git://github.com/pdepend/pdepend.git

Ну и в самом проекте, можно вызвать данную утилиту.

Использование PHP_Depend в Unix/Linux

Чтобы узнать версию, используйте:

$ pdepend --version

Теперь у вас есть запущенная версия PHP_Depend, которая может быть вызвана в командной строке:

$  pdepend --summary-xml=/tmp/sum.xml /path_to_code

Вот собственно и все, тема «Установка PHP_Depend в Unix/Linux» завершена.

The post Установка PHP_Depend в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php_depend-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phploc-v-unix-linux/ https://linux-notes.org/ustanovka-phploc-v-unix-linux/#respond Thu, 30 Mar 2017 00:56:37 +0000 http://linux-notes.org/?p=12161 Установка PHPLOC в Unix/Linux phploc — является инструментом для быстрого измерения размера и анализа структуры PHP проекта. Установка PHPLOC в Unix/Linux -=== Использование PHAR файла===- Самый простой способ получить PHPLOC — загрузить архив PHP (PHAR), в котором имеются все необходимые зависимости PHPLOC и они находятся в одном файле: $ wget https://phar.phpunit.de/phploc.phar && chmod +x phploc.phar && […]

The post Установка PHPLOC в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHPLOC в Unix/Linux

phploc — является инструментом для быстрого измерения размера и анализа структуры PHP проекта.

Установка PHPLOC в Unix/Linux

-=== Использование PHAR файла===-

Самый простой способ получить PHPLOC — загрузить архив PHP (PHAR), в котором имеются все необходимые зависимости PHPLOC и они находятся в одном файле:

$ wget https://phar.phpunit.de/phploc.phar && chmod +x phploc.phar && mv phploc.phar /usr/local/bin/phploc

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phploc.phar
$ php phploc.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev phploc/phploc

Имеется готовый проект, который хорошо подойдет для тестирования данной утилиты и jenkins:

$ git clone https://github.com/sebastianbergmann/phploc

Затем вы можете вызвать его, используя исполняемый файл vendor/bin/phploc. А на этом, статья «Установка PHPLOC в Unix/Linux» подошла к завершению.

The post Установка PHPLOC в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phploc-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/ https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/#respond Wed, 29 Mar 2017 23:49:10 +0000 http://linux-notes.org/?p=12157 Установка PHP_CodeSniffer в Unix/Linux PHP_CodeSniffer — Представляет собой набор из двух PHP-скриптов; Основной скрипт phpcs, который выделяет PHP, JavaScript и CSS-файлы для обнаружения нарушений определенного стандарта кодирования, а второй скрипт phpcbf автоматически исправляет стандартные нарушения кодирования. PHP_CodeSniffer — это важный инструмент разработки, который гарантирует, что ваш код остается чистым и последовательным. Установка PHP_CodeSniffer в Unix/Linux -=== […]

The post Установка PHP_CodeSniffer в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP_CodeSniffer в Unix/Linux

PHP_CodeSniffer — Представляет собой набор из двух PHP-скриптов; Основной скрипт phpcs, который выделяет PHP, JavaScript и CSS-файлы для обнаружения нарушений определенного стандарта кодирования, а второй скрипт phpcbf автоматически исправляет стандартные нарушения кодирования. PHP_CodeSniffer — это важный инструмент разработки, который гарантирует, что ваш код остается чистым и последовательным.

Установка PHP_CodeSniffer в Unix/Linux

-=== Использование готового пакета===-

Самый простой способ начать работу с PHP_CodeSniffer — загрузить файлы Phar для каждой из команд:

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
$ php phpcs.phar -h

И еще одно действие:

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar
$ php phpcbf.phar -h

Для удобства, я бы переместил данные файлы:

# wget https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && sudo chmod +x phpcs.phar && sudo mv phpcs.phar /usr/local/bin/phpcs

Ну и для другого:

# wget https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar && sudo chmod +x phpcbf.phar && sudo mv phpcbf.phar /usr/local/bin/phpcbf

-=== Использование установщика PEAR===-

Если вы используете PEAR, вы можете установить PHP_CodeSniffer с помощью PEAR-установщика. Чтобы установить PHP_CodeSniffer с помощью PEAR-установщика (сначала убедитесь, что вы установили PEAR) выполните следующую команду:

$ pear install PHP_CodeSniffer

-=== Использование Composer===-

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

$ composer global require "squizlabs/php_codesniffer=*"

PS: если нужно установить composer — вот статья:

Установить PHP Composer в Unix/Linux

Убедитесь, что у вас есть каталог bin в PATH. Значение по умолчанию: ~/.composer/vendor/bin/,  но вы можете проверить данное значение, запустив команду:

$ composer global config bin-dir --absolute

Или, альтернативно, включите зависимость для squizlabs/php_codesniffer в вашем composer.json файле. Для примера:

{
"require-dev": {
"squizlabs/php_codesniffer": "2.*"
}
}

После этого вы сможете запускать PHP_CodeSniffer из папки установщика:

./vendor/bin/phpcs -h
./vendor/bin/phpcbf -h

Вы также можете скачать PHP_CodeSniffer с исходного кода и запускать phpcs и phpcbf команды из под директории. Например:

$ git clone https://github.com/squizlabs/PHP_CodeSniffer.git
$ cd PHP_CodeSniffer
$ php scripts/phpcs -h
$ php scripts/phpcbf -h

Как-то так. У меня с темой «Установка PHP_CodeSniffer в Unix/Linux» все.

The post Установка PHP_CodeSniffer в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phpunit-v-unix-linux/ https://linux-notes.org/ustanovka-phpunit-v-unix-linux/#respond Wed, 29 Mar 2017 23:25:23 +0000 http://linux-notes.org/?p=12155 Установка PHPUnit в Unix/Linux PHPUnit — это платформа для тестирования PHP проектов . Это пример архитектуры xUnit для фреймворков модульного тестирования. Установка PHPUnit в Unix/Linux -==Используем готовый phpunit.phar файл ==- Самый последний релиз, можно скачать следующим образом: # wget https://phar.phpunit.de/phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /usr/local/bin/phpunit Вы также можете сразу же использовать PHAR […]

The post Установка PHPUnit в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHPUnit в Unix/Linux

PHPUnit — это платформа для тестирования PHP проектов . Это пример архитектуры xUnit для фреймворков модульного тестирования.

Установка PHPUnit в Unix/Linux

-==Используем готовый phpunit.phar файл ==-

Самый последний релиз, можно скачать следующим образом:

# wget https://phar.phpunit.de/phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /usr/local/bin/phpunit

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phpunit.phar

$ php phpunit.phar

Можно скачивать определенные версии данной утилиты:

$ wget https://phar.phpunit.de/phpunit-6.0.phar && sudo chmod +x phpunit-6.0.phar && sudo mv phpunit-6.0.phar /usr/local/bin/phpunit

Последний релиз поддерживает PHP 7.0 и PHP 7.1, чтобы получить поддержку PHP 5.6, скачайте:

$ wget https://phar.phpunit.de/phpunit-5.7.17.phar && sudo chmod +x phpunit-*.phar && sudo mv phpunit-*.phar /usr/local/bin/phpunit

-==Используем composer ==-
Simply add a (development-time) dependency on phpunit/phpunit to your project’s composer.json file if you use Composer to manage the dependencies of your project:

$ composer require --dev phpunit/phpunit ^6.0

Доступны следующие дополнительные пакеты:

PHP_Invoker

Утилита класса для вызова callables с тайм-аутом. Этот пакет необходим для обеспечения тайм-аутов тестирования в строгом режиме.

Этот пакет включен в дистрибутив PHAR для PHPUnit. Его можно установить через Composer, используя следующую команду:

$ composer require --dev phpunit/php-invoker

DbUnit
DbUnit порт для PHP/PHPUnit для поддержки тестирования взаимодействия с базой данных.

Этот пакет не входит в дистрибутив PHPARnit PHP. Его можно установить через Composer, используя следующую команду:

$ composer require --dev phpunit/dbunit

Чтобы проверить версию, используйте команду:

$ phpunit --version

Для вызова помощи, используйте:

$ phpunit --help

Очень простая установка, по этому, моя тема «Установка PHPUnit в Unix/Linux» завершена.

The post Установка PHPUnit в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phpunit-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/ https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/#comments Sun, 19 Feb 2017 02:27:46 +0000 http://linux-notes.org/?p=11844 Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux Покопавшись у себя в черновиках, я нашел довольно интересную тему — настройка процесс менеджера для работы php-fpm и nginx. Я постараюсь рассказать как можно больше информации по этой теме. Расскажу на наглядных примерах что лучше и как считается некоторые важные параметры в php-fpm. И так, что такое «process […]

The post Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux first appeared on linux-notes.org.]]>

Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux

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

И так, что такое «process manager» в php-fpm? Process manager в php-fpm — это менеджер процессов для PHP-FPM, который создает и использует PHP процессы, чтобы получить максимальную отдачу от вашего сервера.

Разновидности Process manager в php-fpm:

  • dynamic — Имеет динамическое число pm.max_children (дочерние процессы). Которое изменяется и задается на основании: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
  • static — Имеет фиксированное число pm.max_children (дочерние процессы).
  • ondemand — Дочерние процессы не запускаются с самого начала. Количество процессов, создаются по требованию (по мере появления запросов, в отличии от PM dynamic, когда запускается  заданное количество процессов, равное pm.start_servers, при старте службы.

Это 3 основных процесс менеджера для php-fpm-а.

Настройка process manager как dynamic для php-fpm в Unix/Linux

Стандартный менеджер процессов и он хорош тем, что имеет несколько PHP-FPM мастеров.

И так, редактируем свой пул и выставляем:

pm = dynamic

И так, сейчас можно определить максимальное количество процессов. Для этого имеется формула:

Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)

Предположим, что на сервере имеется 6Гб RAM, но посмотреть можно следующей утилитой:

# cat /proc/meminfo | grep -E 'MemTotal'
MemTotal:        6291456 kB

Проверяем сколько использует памяти PHP-FPM с помощью следующей команды:

# ps -aylC "php-fpm" | grep -Ev "grep" | sort -n | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
Tot=3126148(46)
Avg=3126148/46=66.3669MB

Чтобы вывести все php-fpm процессы, используйте:

# ps --no-headers -o "rss,cmd" -C php-fpm | sort -n | awk '{print $1/1024 " Mb"}'

Самый «жирный» процесс:

# ps --no-headers -o "rss,cmd" -C php-fpm | sort -n | awk '{print $1/1024,"Mb"}' | tail -n1

Еще один способ:

В 1-й вкладке запускаем:

# while true; do curl http://linux-notes.org &> /dev/null; sleep 1; done

Во 2-й вкладке запускаем проверку:

# ps aux | grep -E 'php-fpm'| grep -Ev "grep" | awk '{print $6/1024, "Mb"}'

Снова таки, я показал список всех процессов. Как правильно поступить и взять среднее значение или самое больше — решать вам. Нужно все тестировать! Количество памяти занятой процессами, можно проверить через утилиту ps_mem:

Установка ps_mem для проверки занятой памяти процессами в Unix/Linux

Тогда максимальное количество процессов можно посчитать (Я решил отдать под использование PHP всю RAM):

(1024*6) / 66 = 93.0909

Видим что можно использовать 93 max servers для php-fpm:

pm = dynamic
pm.max_children = 93 
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 45 
pm.process_idle_timeout = 10s;

Главные параметры:

  • pm = dynamic — Как уже говорилось, это менеджер процессов.
    pm = dynamic
  • pm.max_children — Задается максимальное количество дочерних процессов (процессы-потомки), которые создаются PM.
    pm.max_children= (Общее количество виртуальной памяти)/(память выделенная 1 php процессу) = 93
  • pm.start_servers — Задается количество процессов-потомков, которые будут созданы PM при запуске PHP-FMP.
    pm.start_servers = ~(pm.max_children/3) = 31
  • pm.min_spare_servers — Задается количество процессов, которые должны оставаться в idle, как “запасные”, ожидая задач на выполнение, если количество меньше – будут созданы новые;
    pm.min_spare_servers = ( устанавливаю в 1 ядро) ИЛИ ~(pm.max_children/3) = 31
  • pm.max_spare_servers — наоборот, максимальное количество процессов, которые должны оставаться в idle,если количество больше – некоторые потомки будут уничтожены:
    pm.max_spare_servers = (общему количеству ядер) ИЛИ ~(pm.max_children/2) = 45
  • pm.max_requests – количество запросов процесса, после которого он будет пересоздан, полезно для предотвращения утечек памяти (memory-leak);
    pm.max_requests =  100000
  • pm.process_idle_timeout — время в секундах после чего простаивающий процесс будет удалён.
    pm.process_idle_timeout = 10s

Обратите внимание, что я не принял во внимание (Used Ram + Buffer). Это было бы нужно, если на сервере имелись базы данных:

# cat /proc/meminfo | grep -E '(MemTotal|MemFree|Cached)'
MemTotal:        6291456 kB
MemFree:         1678704 kB
Cached:          2205940 kB

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

# free -m
              total        used        free      shared  buff/cache   available
Mem:           6144        1521        1622         641        3000        3716
Swap:             0           0           0

Тогда, можно было бы пересчитать:

Total Max Processes = (6144 - (1521 + 3000)) / 66 = 24

Перезапускаем php-fpm службу:

$ sudo service php5-fpm restart

или

# service php-fpm restart

PS: Используйте команду в зависимости типа ОС.

Теперь будем использовать htop/top и ab чтобы проверить что и как работает.

Выполняем стрестест:

ab -n 10000 -c 500 http://localhost/index.php

Как-то так.

Имеется скрипт для рекомендаций:

# cd /usr/local/src && wget http://linux-notes.org/wp-content/uploads/scripts/php-fpm/php-fpmpal.sh -q -O - | bash

Дает вполне годные указания:

 (        )  (         (     (       *                      
 )\ )  ( /(  )\ )      )\ )  )\ )  (  `                 (   
(()/(  )\())(()/(     (()/( (()/(  )\))(             )  )\  
 /(_))((_)\  /(_))     /(_)) /(_))((_)()\  `  )   ( /( ((_) 
(_))   _((_)(_))      (_))_|(_))  (_()((_) /(/(   )(_)) _   
| _ \ | || || _ \ ___ | |_  | _ \ |  \/  |((_)_\ ((_)_ | |  
|  _/ | __ ||  _/|___|| __| |  _/ | |\/| || '_ \)/ _` || |  
|_|   |_||_||_|       |_|   |_|   |_|  |_|| .__/ \__,_||_|  
========================================= |_| =============


AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 31.187.70.238. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 31.187.70.238. Set the 'ServerName' directive globally to suppress this message
===== List of PHP-FPM pools =====
--- nagios ---
Configuration file: /etc/php-fpm.d/nagios.conf
List of processes: 53028 53029 53030 53031 53032
Number of processes: 5
Current max_children value: 50
Total memory usage for pool in KB: 54440
Average memory usage per process in KB: 10888
Total potential memory usage for pool (based on average process) (KB): 544400
Largest process in this pool is (KB): 10888
Total potential memory usage for pool (based on largest process) (KB): 544400

--- www ---
Configuration file: /etc/php-fpm.d/www.conf
List of processes: 53033 53034 53035 53036 53037 53038 53039 53040 53041 53042 53043 53044 53045 53046 53047 53048 53049 53050 53051 53052 53053 53054 53055 53056 53057 53058 53059 53060 53061 53062 53083 53119 53434 53491 61608 73379
Number of processes: 36
Current max_children value: 50
Total memory usage for pool in KB: 2295440
Average memory usage per process in KB: 63762
Total potential memory usage for pool (based on average process) (KB): 3188100
Largest process in this pool is (KB): 67792
Total potential memory usage for pool (based on largest process) (KB): 3389600

===== Server memory usage statistics =====
Total server memory in KB: 6291456
  =Total Apache memory usage in KB: 0
  =Total nginx memory usage in KB: 55868
  =Total Varnish memory usage in KB: 0 0
  =Total MySQL memory usage in KB: 201324.8
  =Total PHP-FPM memory usage in KB: 2349880

Memory available to assign to PHP-FPM pools in KB: 6099670 (total free memory + PHP-FPM's current memory usage)

Total potential PHP-FPM memory usage based on largest processes (KB): 3934000 (64.49%) ...GOOD :-)
Total potential PHP-FPM memory usage based on average process size (KB): 3732500 (61.19%) ...GOOD :-)

===== Recommendations per pool =====
-- nagios -- currently uses 54440 KB memory (2.31% of all PHP-FPM memory usage). It should be allowed to use about 140902 KB of all available memory. Its average process size is 10888 KB so this means max_children should be set to ~12. It is currently set to 50 (this can be changed in /etc/php-fpm.d/nagios.conf).
-- www -- currently uses 2295440 KB memory (97.68% of all PHP-FPM memory usage). It should be allowed to use about 5958157 KB of all available memory. Its average process size is 63762 KB so this means max_children should be set to ~93. It is currently set to 50 (this can be changed in /etc/php-fpm.d/www.conf).

===== Other considerations to take into account =====
From the PHP-FPM error logfiles (/var/log/php-fpm/error.log):
 - pool www had reached its max_children value of 50 on 2 occasion(s)

For these pools you may want to compare the recommended max_children value to this information, and decide whether the recommended value would be high enough to prevent max_children from being hit in future.

Note: It is not ideal to run PHP-FPMpal shortly after restarting PHP-FPM or your webservices. This is because PHP-FPMpal makes recommendations based on the average pool process size, and if PHP-FPM was restarted a short while ago then the likelihood is high that there won't have been many requests made to the sites since the restart, and metrics will be skewed and not show a normalised average.
It is also worth noting that if you've recently restarted any services that normally use up a large amount of memory then you probably want to wait a while before running PHP-FPMpal (e.g. if MySQL normally uses 50% of memory, but you've just restarted it then it may only use 10% of memory right now, thus the recommendations will be very skewed).

============================================================

Идем далее…

Настройка process manager как static для php-fpm в Unix/Linux

Статический менеджер процессов почти не используется, из-за того, что имеется 1 PHP-FPM master.

Открываем свой пул из php-fpm-а и меняем параметры:

pm = static
pm.max_children = 5

Перезапускаем php-fpm службу:

$ sudo service php5-fpm restart

или

# service php-fpm restart

PS: Используйте команду в зависимости типа ОС.

Выполняем стрестест:

# ab -n 1000 -c 10 http://localhost/index.php
# ab -n 5000 -c 20 http://localhost/index.php

Больше об утилите «ab» можно узнать в статье:

Проверка нагрузки на web-сервер с ab для Linux и Unix

Открываем конфигурационный файл для php-fpm пула. Его можно найти поискам ( если кто-то не знает где лежит он).

Раскомментируем строчку с  «pm.max_requests» опцией:

pm.max_requests = 500

Снова перезапускаем php-fpm и проверяем нагрузку:

# ab -n 5000 -c 20 http://localhost/index.php

Можно видеть,  что некоторые процессы — умерли, а затем некоторые процессы были убиты, а затем они сново породились!

Настройка process manager как ondemand для php-fpm в Unix/Linux

Самый продвинутый ( на мой взгляд) менеджер процессов. С названия очевидно, что он не оставляет процессы, но создает их, по мере необходимы.

Пример пула выглядит следующим образом:

[linux-notes.og]
user = www-data
group = www-data
listen = /var/run/php5-fpm/linux-notes.og/sock
listen.owner = www-data
listen.group = www-data
listen.mode = 770
chdir = /srv/www/wp-content/linux-notes.og/
pm = ondemand
pm.max_children = 5
pm.max_requests = 500

Главные параметры:

  • pm = ondemand — Как уже говорилось, это менеджер процессов.
    pm = ondemand
  • pm.max_children — Задаем максимальное число дочерних-процессов.
    pm.max_children= (Общее количество виртуальной памяти)/(память выделенная 1 php процессу) = 93
  • pm.process_idle_timeout — Задаем время в секундах после чего простаивающий процесс будет удалён.
    pm.process_idle_timeout = 10s
  • pm.max_requests — Задаем количество обработаных запросов, после которых процессы php-fpm будут перезагружены.
    pm.max_requests =  100000

Если вам нужна большая производительность, то менеджер процессов — «OnDemand» не подойдет вам. Тем не менее, на 90% случаев, конфигурация PHP-FPM в режиме OnDemand лучше, чем static или dynamic.

The post Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/feed/ 1
Page_c76a3fcf https://linux-notes.org/ustanovka-php-7-php-fpm-s-nginx-1-9-v-debian-8/ https://linux-notes.org/ustanovka-php-7-php-fpm-s-nginx-1-9-v-debian-8/#respond Sun, 24 Apr 2016 00:56:20 +0000 http://linux-notes.org/?p=9844 Еще в 2014м годе, Zend провел голосование и по результатам голосов, новая версия ПО получила название — PHP7. На данный момент (2019 год), самая последняя версия ПО — это PHP-7.4. Установка PHP 7(php-fpm) с Nginx в Centos/RedHat/Fedora Подключаем необходимые репозитории, — стоит подключить EPEL и REMI. Документация тут: Установка EPEL Установка REMI Выполним поиск пакета: […]

The post Установка PHP 7(php-fpm) с Nginx в Unix/Linux first appeared on linux-notes.org.]]>

Еще в 2014м годе, Zend провел голосование и по результатам голосов, новая версия ПО получила название — PHP7. На данный момент (2019 год), самая последняя версия ПО — это PHP-7.4.

Установка PHP 7(php-fpm) с Nginx в Centos/RedHat/Fedora

Подключаем необходимые репозитории, — стоит подключить EPEL и REMI. Документация тут:

Установка EPEL

Установка REMI

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

$ yum --enablerepo=remi search php74

Чтобы поставить, выполняем:

$ yum --enablerepo=remi install php74 php74-php-fpm -y

PS: Версии можно менять, например php71, php72, php73.

Если необходимо, можно поставить модули, например:

$ yum --enablerepo=remi-php74 install -y \
	php74-php-bcmath \
	php74-php-gd \
	php74-php-gmp \
	php74-php-imap \
	php74-php-intl \
	php74-php-json \
	php74-php-ldap \
	php74-php-mbstring \
	php74-php-mysql \
	php74-php-odbc \
	php74-php-pdo \
	php74-php-snmp \
	php74-php-soap \
	php74-php-tidy \
	php74-php-xml \
	php74-php-xmlrpc \
	php74-php-cli \
	php74-php-devel \
	php74-php-lz4 \
	php74-php-opcache \
	php74-php-pecl-apcu \
	php74-php-pecl-crypto \
	php74-php-pecl-json-post \
	php74-php-pecl-memcache \
	php74-php-pecl-memcached \
	php74-php-pecl-rrd \
	php74-unit-php

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

# yum-config-manager --enable remi-php74

Чтобы проверить версию, выполним:

$ php74 -v
PHP 7.4.0RC4 (cli) (built: Oct 15 2019 11:28:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.0RC4, Copyright (c), by Zend Technologies

Если есть необходимость внести какие-то настройки в сам php, то открываем:

# vim /etc/opt/remi/php74/php.ini

Если нужно внести изменения в php-fpm, открываем:

# vim /etc/opt/remi/php74/php-fpm.d/www.conf

У меня он выглядит:

; Start a new pool named 'www'.
[www]

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.

user = www
group = www

;user = nginx
;group = nginx

listen = 127.0.0.1:9001
;listen = /tmp/php74-fpm.sock  ;/var/run/php74-fpm/php74-fpm.sock

;listen.allowed_clients = 127.0.0.1:/php_admin_value


; Set listen(2) backlog. A value of '-1' means unlimited.
; Default Value: -1
;listen.backlog = -1

; List of ipv4 addresses of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any
listen.allowed_clients = 127.0.0.1

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0666
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
;user = apache
; RPM: Keep a group allowed to write in log dir.
;group = apache

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives:
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
; Note: This value is mandatory.
pm = dynamic

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes to be created when pm is set to 'dynamic'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI.
; Note: Used when pm is set to either 'static' or 'dynamic'
; Note: This value is mandatory.
pm.max_children = 110
;50

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 30

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 30

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 45

; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
pm.process_idle_timeout = 30s

; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
pm.max_requests = 500000000

; The URI to view the FPM status page. If this value is not set, no URI will be
; recognized as a status page. By default, the status page shows the following
; information:
;   accepted conn    - the number of request accepted by the pool;
;   pool             - the name of the pool;
;   process manager  - static or dynamic;
;   idle processes   - the number of idle processes;
;   active processes - the number of active processes;
;   total processes  - the number of idle + active processes.
; The values of 'idle processes', 'active processes' and 'total processes' are
; updated each second. The value of 'accepted conn' is updated in real time.
; Example output:
;   accepted conn:   12073
;   pool:             www
;   process manager:  static
;   idle processes:   35
;   active processes: 65
;   total processes:  100
; By default the status page output is formatted as text/plain. Passing either
; 'html' or 'json' as a query string will return the corresponding output
; syntax. Example:
;   http://www.foo.bar/status
;   http://www.foo.bar/status?json
;   http://www.foo.bar/status?html
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.

; The ping URI to call the monitoring page of FPM. If this value is not set, no
; URI will be recognized as a ping page. This could be used to test from outside
; that FPM is alive and responding, or to
; - create a graph of FPM availability (rrd or such);
; - remove a server from a group if it is not responding (load balancing);
; - trigger alerts for the operating team (24/7).
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.
; Default Value: not set
;ping.path = /ping

pm.status_path = /status

; This directive may be used to customize the response of a ping request. The
; response is formatted as text/plain with a 200 response code.
; Default Value: pong
;ping.response = pong

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 600s

; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_slowlog_timeout = 0

; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = /var/log/php-fpm/www-slow.log

; Set open file descriptor rlimit.
; Default Value: system defined value
rlimit_files = 65535

; Set max core size rlimit.
; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value
;rlimit_core = 0

; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: chrooting is a great security feature and should be used whenever
;       possible. However, all PHP paths will be relative to the chroot
;       (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =

; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
;catch_workers_output = yes

; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
; FPM to .php extensions to prevent malicious users to use other extensions to
; exectute php code.
; Note: set an empty value to allow all extensions.
; Default Value: .php
security.limit_extensions = .php .php3 .php4 .php5

; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

; Additional php.ini defines, specific to this pool of workers. These settings
; overwrite the values previously defined in the php.ini. The directives are the
; same as the PHP SAPI:
;   php_value/php_flag             - you can set classic ini defines which can
;                                    be overwritten from PHP call 'ini_set'.
;   php_admin_value/php_admin_flag - these directives won't be overwritten by
;                                     PHP call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.

; Defining 'extension' will load the corresponding shared extension from
; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
; overwrite previously defined php.ini values, but will append the new value
; instead.

; Default Value: nothing is defined by default except the values in php.ini and
;                specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
php_admin_value[error_reporting] = 0
php_admin_value[error_log] = /var/log/php-fpm/php74-fpm.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M

php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on

; Set session path to a directory owned by process user
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

Чтобы запустить php-fpm, выполните:

 # systemctl start php74-php-fpm.service

Чтобы проверить статус, выполните:

# systemctl status php74-php-fpm.service

Можно сервис добавить в автозагрузку ОС:

# systemctl enable php74-php-fpm.service

Как-то так.

Установка PHP 7(php-fpm) с Nginx 1.9 в Debian 8

Недавно, вышла новая версия PHP7. В данной статье «Установка PHP 7 в Debian 8» я хотел бы уделить внимание установки PHP 7 в Debian 8.

И так начнем…

Установка nginx 1.9 в Debian 8.

Для начала, добавляем ключ:

#apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

Добавляем репозиторий:

# echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list

И выполняем установку:

# apt-get update && apt-get install -y ca-certificates nginx

Я ленивый иногда, по этому для этой задачи, я написал bash скрипт. Вы можете его тоже использовать:

# cd /usr/local/src && wget https://raw.githubusercontent.com/SebastianUA/Nginx-1.9-PHP-7-PHP7-FPM/master/Install-nginx1.9.x.sh   && bash Install-nginx1.9.x.sh

Установка PHP 7 в Debian 8 с использованием репозитория Dotdeb.

Чтобы установить PHP 7 на Debian 8, но для начала добавляем репозиторий:

# echo "deb http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list && echo "deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list

После этого, загружаем и запускаем ключ GnuPG:

# cd /usr/local/src && wget https://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg

Обновляем репозиторий:

# apt-get update

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

# apt-get install -y php7.0-fpm

Чтобы запустить PHP 7, используйте:

Запуск:

# service php7.0-fpm start

Останавливаем:

# service php7.0-fpm stop

Перезапуск:

# service php7.0-fpm restart

Чтобы проверить, правильно ли сконфигурирован конфиг php-fpm, используйте:

# php7.0-fpm -t

Ну это простой вариант и взят в качестве примера (что можно использовать данный репозиторий), а дальше, я опишу нормальное решение.

Установка PHP 7 в Debian 8 с исходного кода.

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

# apt-get install -y wget curl git vim make checkinstall build-essential libtool gettext libpcre3 libpcre3-dev libldap2-dev libpq-dev libxslt-dev libxpm-dev libmysqlclient-dev libgmp3-dev libpng12-dev libpng-dev libfreetype6-dev autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config openssl libpng-dev libpspell-dev librecode-dev libreadline-dev libjpeg-dev libxml2 libxml2-dev libbz2-dev libmcrypt-dev libicu-dev libltdl-dev libcurl3

Я указал все нужные зависимости для моей сборки, вы можете дополнить их (в зависимости от своих нужд). Если не сделать это, то вы получите ошибку в процессе выполнения команды ./configure.

Переходим в директорию, скачиваем и распаковываем архив с php7, для этого выполните команду:

# cd /usr/src && wget http://be2.php.net/get/php-7.0.2.tar.gz/from/this/mirror -O php-7.0.2.tar.gz && tar -xzf php-*.tar.gz

Вы можете использовать другую ссылку (если вышла пхп свежей версии) с официального сайта.

Переходим в папку:

# cd php-*

Добавляем нужные модули в свою сборку и указываем параметры:

./buildconf --force CONFIGURE_STRING=" --prefix=/usr/local/php7 \  --with-config-file-path=/usr/local/etc \  
--with-config-file-scan-dir=/usr/local/php7/etc/conf.d \  
--enable-mbstring \  
--with-curl \  
--with-openssl \  
--with-xmlrpc \  
--enable-soap \  
--enable-zip \  
--with-gd \  
--with-jpeg-dir \  
--with-png-dir \  
--with-pgsql \  
--enable-embedded-mysqli \  
--with-freetype-dir \  
--enable-intl \  
--with-xsl \  
--with-mysqli \  
--with-pdo-mysql \  
--enable-pdo=shared \  
--with-pdo-mysql=shared \  
--with-pdo-sqlite=shared \  
--with-pdo-pgsql=shared \  
--disable-short-tags \  
--enable-phpdbg \  
--with-readline \  
--with-gettext \  
--enable-opcache \  
--enable-xdebug \  
--enable-intl \  
--enable-mbstring \  
--enable-pcntl \  
--enable-sockets \  
--enable-sysvmsg \  
--enable-sysvsem \  
--enable-sysvshm \  
-enable-ftp \  
--enable-fpm \  
--enable-shmop \  
--with-fpm-user=www-data \  
--with-fpm-group=www-data \  
--bindir=/usr/local/bin \  
--sbindir=/usr/local/sbin \  
--libdir=/usr/local/php7/lib \  
--includedir=/usr/local/php7/include \  
--mandir=/usr/local/php7"

При необходимости, можно просмотреть весь список доступных модулей:

# ./configure --help

А сейчас, приступаем к компиляции и собственно к самой установки PHP 7:

# ./configure $CONFIGURE_STRING 
# make && make install

Идем далее, копируем конфигурационный файл с php.ini в папку установки PHP:

# cp /usr/src/php-7.0.2/php.ini-production /usr/local/etc/php.ini

Подключаем модуль Zend OPcache: /usr/local/php7/etc/conf.d

# vim /usr/local/etc/modules.ini

Прописываем в него:

# Zend OPcache
zend_extension=opcache.so

И так, настроим сейчас PHP-FPM, для этого открываем файл:

# vim /usr/local/php7/etc/php-fpm.d/www.conf

И прописываем в него:

[global] 
pid = /var/run/php7-fpm.pid 
error_log = /var/log/php7-fpm.log 
include=/usr/local/php7/etc/php-fpm.d/*.conf 
Затем создайте файл: nano /usr/local/php7/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 = 0660 
pm = dynamic 
pm.max_children = 5 
pm.start_servers = 2 
pm.min_spare_servers = 1 
pm.max_spare_servers = 3 

И для этого, создаем init.d скрипт:

# cd /etc/init.d && wget http://linux-notes.org/wp-content/uploads/files/php7-fpm

Назначаем нужные права (исполнение) и добавляем скрипт в автозагрузку своей ОС:

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

Чтобы запустить (в данном случае перезапусить) php7-fpm выполняем:

# service php7-fpm restart

Если используете PHP-FPM с Nginx, то нужно добавьте в блок server виртуального хоста следующий текст:

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

PS: Для всего этого, я написал bash скрипт, вы можете его использовать для своих нужд:

# cd /usr/local/src && wget https://raw.githubusercontent.com/SebastianUA/Nginx-1.9-PHP-7-PHP7-FPM/master/Install-PHP7.sh && bash Install-PHP7.sh

Осталось только перезапустить все службы:

# service nginx restart &&  service php7-fpm restart

Вот и все!

Чтобы проверить, правильно ли сконфигурирован конфиг php-fpm, используйте:

# php7-fpm -t

Установка PHP 7(php-fpm) с Nginx в MacOS

Для начала устанавливаем homebrew, ссылку можно найти тут:

Установка homebrew на MacOS

После чего, можно выполнить поиск и посмотреть какие версии актуальны на данный момент:

$ brew search php7
==> Formulae
php@7.1                                                             php@7.2                                                             php@7.3

Чтобы уствновить, используем:

$ brew install php@7.3

Проверить версию, можно так:

$ php -v

Установка PHP 7(php-fpm) с Nginx на другие Unix/Linux ОС

Для других Unix/Linux ОС, не приходилось ставить еще. Но можно заюзать — Docker, как пример!

Обновление PHP (php-fpm) с Nginx в CentOS/Fedora/Redhat

Будет скоро…

А на этом у меня все, статья «Установка PHP 7(php-fpm) с nginx в Unix/Linux» завершена.

The post Установка PHP 7(php-fpm) с Nginx в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php-7-php-fpm-s-nginx-1-9-v-debian-8/feed/ 0