LINUX.ORG.RU

История изменений

Исправление 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 и разбирать их в несколько потоков. Но там будет заметно сложнее, так как по уму нужно уметь корректно обрабатывать ошибки и реагировать на них нужным образом — у нас файл с ошибкой автоматически окажется необработанным и его можно будет обработать потом вручную.