Итак, у меня есть файл PHP, который будет случайным образом получать новые опубликованные данные от сторонних производителей. Для простоты, давайте назовем это get_data.php
и сказать, что это выглядит примерно так:
<?php
$data = $_REQUEST;
// Data processing
И тогда у меня есть отдельный сценарий, stream.php
, который использует HTML5 Отправленные сервером события для потоковой передачи данных клиенту (JS):
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
while (true) {
echo 'data: ' . $data . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
sleep(1);
}
Каждый скрипт сам по себе работает нормально. Тем не менее, мне нужно передать $data
от первого сценария ко второму.
Я знаю, что могу добиться этого, сохраняя переменную в БД или временном файле, но в идеале я мог бы сделать это с помощью только PHP.
Включение одного файла в другой тоже не выглядит хорошим вариантом, потому что заголовки потока могут испортить ситуацию при сторонней публикации данных, и я бы хотел отделить обработку данных от потока на случай, если последний падает.
НОТА — Это не дубликат других вопросов, спрашивающих, как передавать данные между PHP-скриптами на веб-странице, учитывая, что я, кажется, не могу использовать $_SESSION
переменные в качестве данных публикуются сторонней организацией, отличной от пользователя, обращающегося к потоку событий.
Вы можете использовать разделяемую память для передачи данных между отдельными скриптами. http://php.net/manual/en/intro.sem.php
Для этого потребуется, чтобы оба сценария выполнялись на одной и той же физической машине / виртуальной машине, и вам нужно будет определить способ определения блоков общей памяти для какого сеанса.
Вы можете объединить это с системными очередями сообщений, чтобы сигнализировать, когда (и, возможно, куда) поступили новые данные. Хотя будьте осторожны, поскольку они реализованы с различными ограничениями в системах Linux / BSD / Unix (MacOS имеет некоторые досадные ограничения, которых нет в Linux)
НТН
Других решений пока нет …