Могут ли экземпляры одного и того же PHP-скрипта пересекаться?
-
07-07-2019 - |
Вопрос
Я предполагаю, что для каждого запроса страницы веб-сервер (например.Apache) создает новый экземпляр скрипта в памяти.Могут ли эти экземпляры взаимодействовать друг с другом во время работы?и передавать данные тоже?
Решение
Если вы хотите передавать данные между скриптами в PHP, я предлагаю использовать memcached или базу данных. Или, возможно, БТР.
Если сценарии принадлежат одному и тому же сеансу, они могут теоретически обмениваться данными через сеанс, но в большинстве случаев это будет односторонняя связь, поскольку только один сценарий может получить доступ к сеансу в любой момент времени (session_start () блокирует сеанс, пока этот сценарий не завершит сеанс явно или явно).
Другие советы
Я считаю, что предложения Мартина и Клетуса справедливы.Моим выбором была бы функция конечной цели скрипта.
- Каким объемом данных вы будете разбрасываться?Можете ли вы справиться с накладными расходами внешнего процесса?
- Какими данными вы обмениваетесь?Это нормализуется?Или это сейчас стоит нормализовать?
- Нужно ли вам будет обращаться к этим данным позже?Или его можно выбросить после обработки?
Будут ли эти скрипты когда-нибудь запускаться на разных серверах?
Плоские напильники с фиксирующим механизмом
- Реляционная база данных
- База данных документов (хранилище ключей / значений, независимо от того, постоянное оно или нет)
- Общая память (APC, или основные функции)
- Очереди сообщений (Активный MQ и компания)
Я думаю, вы получите максимальную отдачу, экстернализировав процесс, поскольку у вас может быть более одной машины, управляющей сообщениями / данными, и более одной, производящей / потребляющей их.
Модель, из которой работают PHP-скрипты, на самом деле не содержит понятия о какой-либо персистентности в памяти для этих скриптов, так как обычно они предназначены для запуска только в течение минимального времени, необходимого для обслуживания запрашиваемой страницы. Это затруднило бы какое-либо осмысленное использование для отслеживания состояния между этими сценариями, поскольку обычно после того, как страница обслуживается, сценарию больше нечего делать. Таким образом, обычно любое общение между PHP-скриптами осуществляется больше посредством манипуляций с записями в базе данных и т. П.
Если у вас есть какая-то непрерывная обработка, для которой вы хотите передавать данные, вы можете обратиться к другим моделям веб-приложений, таким как сервлеты.
Вы должны быть в состоянии сделать это с некоторой общей памятью, как описано здесь: http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/ (если вы не работает в Windows)