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

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

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

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

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

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

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

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

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

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

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

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