Могут ли экземпляры одного и того же PHP-скрипта пересекаться?

StackOverflow https://stackoverflow.com/questions/1430417

Вопрос

Я предполагаю, что для каждого запроса страницы веб-сервер (например.Apache) создает новый экземпляр скрипта в памяти.Могут ли эти экземпляры взаимодействовать друг с другом во время работы?и передавать данные тоже?

Это было полезно?

Решение

Если вы хотите передавать данные между скриптами в PHP, я предлагаю использовать memcached или базу данных. Или, возможно, БТР.

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

Другие советы

Я считаю, что предложения Мартина и Клетуса справедливы.Моим выбором была бы функция конечной цели скрипта.

  • Каким объемом данных вы будете разбрасываться?Можете ли вы справиться с накладными расходами внешнего процесса?
  • Какими данными вы обмениваетесь?Это нормализуется?Или это сейчас стоит нормализовать?
  • Нужно ли вам будет обращаться к этим данным позже?Или его можно выбросить после обработки?
  • Будут ли эти скрипты когда-нибудь запускаться на разных серверах?

  • Плоские напильники с фиксирующим механизмом

  • Реляционная база данных
  • База данных документов (хранилище ключей / значений, независимо от того, постоянное оно или нет)
  • Общая память (APC, или основные функции)
  • Очереди сообщений (Активный MQ и компания)

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

Модель, из которой работают PHP-скрипты, на самом деле не содержит понятия о какой-либо персистентности в памяти для этих скриптов, так как обычно они предназначены для запуска только в течение минимального времени, необходимого для обслуживания запрашиваемой страницы. Это затруднило бы какое-либо осмысленное использование для отслеживания состояния между этими сценариями, поскольку обычно после того, как страница обслуживается, сценарию больше нечего делать. Таким образом, обычно любое общение между PHP-скриптами осуществляется больше посредством манипуляций с записями в базе данных и т. П.

Если у вас есть какая-то непрерывная обработка, для которой вы хотите передавать данные, вы можете обратиться к другим моделям веб-приложений, таким как сервлеты.

Вы должны быть в состоянии сделать это с некоторой общей памятью, как описано здесь: http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/ (если вы не работает в Windows)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top