Это может быть очень глупый вопрос, поэтому, пожалуйста, потерпите меня.
У меня есть php-скрипт, который делает вызовы API для Shopify.
Весь смысл этого сценария php состоит в том, чтобы распечатать заявления для каждого клиента.
Теперь это должно пройти около 200 клиентов.
Весь этот процесс занимает около 15 минут.
Обычно это выполняется ежемесячно с помощью cron.
Но мне нужно иметь возможность запускать его и вручную. Я просто хочу, чтобы страница выполнялась и делала все в фоновом режиме, когда мой браузер или интернет-соединение не играют никакой роли в том, завершено ли полное выполнение.
Задание cron запускает header_php.php? Run = ежемесячно
В любом случае я могу запустить его вручную, убедиться, что он получает ответ 200 со страницы, а затем закрыть вкладку браузера и убедиться, что apache сделает все остальное?
Я бы также выполнил это через AJAX-вызов.
Другое дело, что после обработки каждого оператора скрипт выводит его в pdf и отправляет по электронной почте клиенту. Таким образом, нет никакой обратной связи от страницы, когда она запускается.
Легко выполнимо с простыми заголовками HTTP.
Content-length
а также Connection: close
заголовкиЭто так ответ прибивает это (комментарии полезны также).
Вы можете вызвать свой сценарий с помощью другого сценария, который выполняется в фоновом режиме.
shell_exec('nohup /usr/bin/php /dir/to/your/script.php > /dev/null 2>/dev/null &');
Тогда вам не нужно ждать, чтобы закончить работу
на Linux
<?php
exec(''.$command.' > /dev/null 2>&1 &');
?>
на окнах
<?php
$shell = new COM("WScript.Shell");
$shell->run($command, 0, false);
?>
где команда будет что-то вроде
php -f $ path / to / filename
если вы помещаете это на страницу, вы можете вызывать ее всякий раз, когда захотите, и она создаст поток, который вызовет apache, но не потребует от браузера ожидания какого-либо ответа.