История изменений
Исправление
KRoN73,
(текущая версия)
:
Самое простое решение. В старом коде делаем
<?php
//...
// Сохраняем данные для последующей обработки отдельным процессом
file_put_contents('/tmp/tasks/'.date('Ymd-His-').uniqid(), json_encode(['some' => 'data']));
// ...
где в json_encode засовываем нужные для последующей работы данные.
В консоли отдельно вешаем что-то типа:
#!/bin/bash
inotifywait -m --format '%w%f' -e moved_to,close_write /tmp/tasks/ | while read -r line
do
php do-task.php "$line"
done
И в do-task.php:
<?php
require 'vendor/autoload.php';
require 'config.php';
$file = $argv[1];
if(!is_file($file))
return;
$data = json_decode(file_get_contents($file), true);
// тут что-то делаем с этими данными
// ...
// сносим ненужный файл с задачей
unlink($file);
Более сложные варианты — класть запросы в БД/MQTT/Redis и разбирать их в несколько потоков. Но там будет заметно сложнее, так как по уму нужно уметь корректно обрабатывать ошибки и реагировать на них нужным образом — у нас файл с ошибкой автоматически окажется необработанным и его можно будет обработать потом вручную.
Исходная версия
KRoN73,
:
Самое простое решение. В старом коде делаем
<?php
//...
// Сохраняем данные для последующей обработки отдельным процессом
file_put_contents('/tmp/tasks/'.date('Ymd-His-').uniqid(), json_encode(['some' => 'data']));
// ...
где в json_encode засовываем нужные для последующей работы данные.
В консоли отдельно вешаем что-то типа:
inotifywait -m --format '%w%f' -e moved_to,close_write /tmp/tasks/ | while read -r line
do.
php do-task.php "$line"
done
И в do-task.php:
<?php
require 'vendor/autoload.php';
require 'config.php';
$file = $argv[1];
if(!is_file($file))
return;
$data = json_decode(file_get_contents($file), true);
// тут что-то делаем с этими данными
// ...
// сносим ненужный файл с задачей
unlink($file);
Более сложные варианты — класть запросы в БД/MQTT/Redis и разбирать их в несколько потоков. Но там будет заметно сложнее, так как по уму нужно уметь корректно обрабатывать ошибки и реагировать на них нужным образом — у нас файл с ошибкой автоматически окажется необработанным и его можно будет обработать потом вручную.