php cgi что это

Всё, что вы хотели знать о CLI, CGI, MOD, но стеснялись спросить

… Я знаю кун-фу, каратэ, таэквондо и еще много страшных слов!
(с) анекдот

php cgi что это. Смотреть фото php cgi что это. Смотреть картинку php cgi что это. Картинка про php cgi что это. Фото php cgi что это

Меня начинающие админы последнее время стали часто спрашивать «А чем отличаются пакеты php-cgi, php-cli и mod_php? И почему, например, для Python есть mod_python, но нет python-cgi?»
Сначала было смешно, но потом стало ясно, что сей вопрос хоть раз да возникал у каждого, кто занимается администрированием LAMP(ссылка) и подобных серверов.
Статья написана по мотивам моей беседы с felvis, поэтому заранее извиняюсь за некоторую вольность изложения.

Пару слов о процессах

Ещё пример, вместо команды env можно выполнить
cat /proc/self/environ

Увидите то же самое, только в менее удобочитаемом виде 🙂
Всё, теперь то что нам нужно для понимания отличий CGI и CLI мы знаем. Идём далее.

Буквы, буквы

поймёте, что имеется ввиду.

Кстати, именно из-за вышеописанного один и тот же скрипт будет работать по-разному из консоли и через браузер. Разработчик, будь внимателен при отладке!

Немного про пакеты

Теперь за Python. Почему есть mod_python, но нет python-cgi и python-cli?
Тут всё просто, проведём аналогию:

Нужно отдельно пояснить, что CGI — это Common Gateway Interface для веб-серверов (не только Апача). То есть CGI — это лишь технология, с помощью которой можно выполнять что угодно, любые бинари, которые формируют веб-страницу (хоть программы на Си писаные — пофиг). В Апаче эту технологию реализует mod_cgi — через этот модуль Апач дёргает скрипт, в котором прописан shebang #!/usr/bin/python или #!/usr/bin/php и тд — и скрипт выполняется.
Основной недостаток mod_cgi — скорость выполнения скриптов, потому-то и пишут отдельные модули для Апача, которые интепретитруют PHP, Python, shell-скрипты — так быстрее.
Конечно есть mod_fcgi, который сильно быстрее mod_cgi — но описание mod_fcgi не входит в рамки этой статьи.
_________
Текст подготовлен в ХабраРедакторе
В тексте использована картинка Binary от Brian «Visual Paradox» Kissinger.

Источник

Php cgi что это

Та не, не сломаешь, в принципе. Но и DLE не будет работать нормально.

На всякий случай просто сохрани текущий конфиг, до переключения.

Просто ISP бывает глючит, когда слишком сильно модифицируешь дефолтный конфиг. А в случае с DLE его нужно модифицировать очень сильно, либо подключать инклюдом (самый верный вариант).

А если не будешь руками лазить в конфиг, и уверен, что DLE работает с дефолтным конфигом Apache — то можно и туда-обратно тыкать, ничего не сломаешь.

Это в ISP 4 с этим сложней было, там панель вообще не понимает изменения в конфигах которые вручную вносили, никакие. И сносит их к херам если начинаешь через панель трогать домены.

Что касается CGI — не совсем так, CGI точно так же через апач работает.

«Чтобы иметь преимущества php 7 его нужно обновить общесистемный. Тогда и высокопроизводительный сервис PHP-fpm станет работать на этой же версии. Но чего делать пока не рекомендуется, да и нету его еще в стабильных репозиториях большинства OS.»

Спасибо за эту статью и видео! Видео кстати также будет полезно тем, кто интересуется темой «как надо работать в терминале» )

P.S. Php7 сам по себе должен быть быстрее 5-го, т.к. в нем обновлен движок Zend и выброшено много устаревшего

Ну на самом деле тут в этой статье инфа немного уже устарела, ибо писалась на форуме более чем полгода назад. По крайней мере применительно к использованию php 7 в режиме php-fpm, особенно на сервере под управлением панельки ISPmanager 5. В нем можно в любом режиме удобно юзать любую версию PHP. И 7, и даже 7.1. Это я как раз и показывал на видео. И в другой статье http://vpsadm.ru/php-7-ispmanager-5-kak-ustanovit/

Что касается работы без панели — то сложности могут быть только при запуске в режиме апач-модуля.

В том же centos такую возможность не знаю как вкорячить. Технически это разумеется возможно, просто я пока не знаю как)

Далее по версиям OS. Это зависит исключительно от удобства администрирования, от привычки работы с ними. Для большинства задач и сайтов мне видится Centos удобней. В Debian 8 легко можно поставить обе версии параллельно. По-умолчанию там ставится из стабильных официальных репов 5.6 версия. Но можно установить дополнительно 7ю версию и переключаться между ними. В режиме php-fpm можно запускать сайты параллельно на разных версиях, в режиме модуля апача можно юзать либо ту либо другую, легко между ними переключаться. В режиме CGI тоже можно, но его вообще не стоит юзать. Если только для отладки.

На продакшн ставят то, что нормально работает) Поэтому перед продакшном надо погонять в тестах 🙂 Буквально на прошлой неделе переводил на php 7 как раз самый что ни на есть продакшн — огромную онлайн-библиотеку с трафом 200к в сутки, работающую на кластере из трёх серваков. В паре с разрабом, так задолбались, несколько дней по ночам. Оно работало на debian 7, в который вообще нет технической возможности поставить толком php 7 в режиме апача. Пришлось апгрейдить OS до debian 8, и потом только ставить php 7. Переключить у нас получилось только с третьей попытки, первые две была нестабильность, тормоза, глюки и отвалившийся функционал. Причем, это с учетом того, что до этого было протестировано на PHP 7.

Источник

PHP → Коротко о CGI, FastCGI, PHP-FPM и mod_php

Решил навести в голове порядок о том, как работают вместе веб-сервер и PHP.

Common Gateway Interface, «общий интерфейс шлюза» — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как программы должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.

В качестве CGI-программ могут использоваться программы/скрипты написанные на любых языках программирования, как на компилируемых, так и на скриптовых, в том числе на shell.

CGI-скрипты были популярны до того, как для веб-разработки стали преимущественно использовать PHP. Хотя сам PHP интерпретатор позволяет работать в режиме CGI (см. ниже).

Основной момент: «CGI» это не язык программирования и не отдельная программа! Это просто протокол (стандарт, спецификация, соглашение, набор правил).

FastCGI

Дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.

FastCGI программа работает следующим образом: программа единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, «умирающий» после окончания обработки.

Написание FastCGI программ-демонов сложнее чем CGI, нужны дополнительные библиотеки, зависящие от языка.

Опять же, сама аббревиатура FastCGI это не язык программирования и не отдельная программа, это как и в случае CGI — просто спецификация.

PHP в режиме CGI

PHP в режиме CGI это самый старый способ выполнения php-скриптов веб-сервером. Режим доступен по умолчанию, однако может быть отключён при компиляции.

Для Apache нужен модуль mod_cgi (поставляется вместе с Apache). Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты.

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

PHP в режиме FastCGI

Помимо CGI режима, PHP из коробки умеет работать и в FastCGI режиме (с версии 5.3 даже в двух FastCGI режимах). Режим включается флагом при компиляции интерпретатора, флаг зависит от версии PHP.

Для работы с Apache нужен модуль mod_fcgid или mod_fastcgi, либо связка из mod_proxy_fcgi + PHP-FPM.

Nginx умеет работать с FastCGI приложениями из коробки, но именно для PHP дополнительно нужен PHP-FPM (см. ниже).

Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам php интерпретатор, а не какой-то конкретный php-скрипт.

PHP-FPM

FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.

Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI (список улучшений). С версии PHP 5.3 набор патчей включён в ядро, а дополнительные возможности PHP-FPM включаются флагом при компиляции.

PHP-FPM используется в основном в связке с Nginx, без установки Apache.

mod_php

Это модуль для Apache, позволяющий ему выполнять php скрипты. Является наверно самым популярным и простым способом подружить Apache и PHP. Модуль не использует ни CGI, ни FastCGI. Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP.

Источник

Коротко о CGI, FastCGI, PHP-FPM и mod_php

Все указанные ниже механизмы являются SAPI, которые позволяют серверу взаимодействовать со сценариями, написанными на PHP.

PHP в режиме CGI

PHP в режиме CGI это самый старый способ выполнения php-скриптов веб-сервером. Режим доступен по умолчанию, однако может быть отключён при компиляции. Для Apache нужен модуль mod_cgi (поставляется вместе с Apache). Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты. В данный момент режим используется редко в силу малой производительности.

Common Gateway Interface — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как программы должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.

В качестве CGI-программ могут использоваться программы/скрипты написанные на любых языках программирования, как на компилируемых, так и на скриптовых, и даже на shell. CGI-скрипты были популярны до того, как для веб-разработки стали преимущественно использовать PHP.

PHP в режиме FastCGI

Помимо CGI режима, PHP из коробки умеет работать и в FastCGI режиме (с версии 5.3 даже в двух FastCGI режимах). Режим включается флагом при компиляции интерпретатора, флаг зависит от версии PHP.

Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам php интерпретатор, а не какой-то конкретный php-скрипт.

FastCGI — это дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.

FastCGI программа работает следующим образом: программа единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, «умирающий» после окончания обработки.

PHP-FPM

FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.

Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI. С версии PHP 5.3 набор патчей включён в ядро, а дополнительные возможности PHP-FPM включаются флагом при компиляции.

PHP-FPM используется в основном в связке с Nginx, без установки Apache.

Модуль mod_php

Это модуль для Apache, позволяющий ему выполнять php скрипты. Является наверно самым популярным и простым способом подружить Apache и PHP. Модуль не использует ни CGI, ни FastCGI. Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP.

Источник

Режимы работы PHP

На хостинге Hostland интерпретатор PHP может работать в нескольких основных режимах. В этом обзоре мы рассмотрим следующие режимы работы:

PHP как модуль Apache (mod_php)

Данный режим является основным режимом работы php на хостинге Hostland. При этом режиме в настройках веб-сервера Apache подключается специально скомпилированный модуль mod_php. В этом случае каждый процесс веб-сервера будет включать в себя этот модуль. Выбор этого режима подходит для широкого спектра сайтов с большой и малой посещаемостью.

Преимущества:

Недостатки:

PHP как CGI приложение

В этом режиме запускается интерпретатор php-cgi для всех скриптов, для которых установлен CGI в качестве обработчика. Если большая часть сайта состоит из статического содержимого, то CGI будет хорошим выбором, т.к. будет обеспечено экономичное использование оперативной памяти за счет того, что нужный интерпретатор будет вызываться в случае необходимости. Но, и в то же время, такой метод незначительно замедляет исполнение, т.к. при каждом запросе понадобится загрузка интерпретатора в память. Запуск PHP в режиме CGI позволяет указывать свой php.ini, что в свою очередь дает бóльшую гибкость в настройках php.

На хостинге Hostland установлены следующие интерпретаторы php, доступные для использования в режиме CGI:

Переключить php в режим CGI (и обратно в режим модуля mod_php) можно двумя способами:

Автоматически в панели управления:

В панели управления хостингом, в разделе «Домены» для каждого домена доступна настройка php.ini. Режим работы php будет автоматически переведен в режим CGI при добавлении хотя бы одной опции php.ini в «Стандартном», «Ограниченном» или «Параноидальном» режиме.

PHP в режиме CGI автоматически подключается только для основного домена. Подключать PHP в режиме CGI для поддоменов необходимо вручную. Для этого скопируйте папку sys-php-cgi из корневой папки основного домена (данная дирректория появится в автоматическом режиме, после подключения PHP в режим CGI) в корневую папку поддомена. Например, для включения PHP в режиме CGI на поддомене sub.domain.ru нужно скопировать папку

/domain.ru/htdocs/www/sys-php-cgi в папку

/domain.ru/htdocs/sub, если Вы это действие не выполните, то при обращении к поддомену sub.domain.ru будет получена ошибка 500

Вручную (для экспертов):

Создать файл /domain-name.ru/htdocs/www/cgi-bin/php.cgi:

Закачать файл на сервер в ASCII-режиме в папку домена, на котором предполагается запускать PHP в режиме CGI. Например, для домена domain-name.ru это будет папка /domain-name.ru/htdocs/www/cgi-bin/. Если закачать файл не в ASCII-режиме, скрипт работать не будет, будет выдаваться ошибка 500 (Internal Server Error).

Установить на файл php.cgi права 0755 (rwxr-xr-x).

Преимущества:

Недостатки:

Небольшая ремарка:

Из практики работы нашей технической поддержки: при переносе сайтов с других хостингов мы иногда сталкиваемся с ситуацией, в которой приложение отказывается работать в режиме модуля php (с кодом завершения «segmentation fault»), но при этом стабильно работает в режиме php-cgi. С чем это связано сказать затруднительно, но это факт. Обычно это касается т.н. legacy кода, написанного на php5.2 или php4.4. Сайт при этом работает, но клиент, в силу обстоятельств, не может обновить код до современных версий php.

PHP в режиме работы php-fpm

FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколь­кими допол­ни­тель­ными воз­мож­но­стя­ми, кото­рые обычно исполь­зу­ются для очень высо­ко­на­гру­жен­ных сайтов.

Следует помнить, что при работе PHP в режиме FastCGI в памяти «висит» сам php интерпретатор, а не какой-то конкретный php-скрипт.

PHP-FPM используется, в основном, в связке с Nginx, без установки Apache.

Более подробное описание данного режима выходит за рамки обзора данной темы, но на нашем VDS-хостинге мы с радостью поможем вам его настроить.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *