Могут ли сценарии PHP продолжать работать, даже если пользователь закрыл браузер?

Например, есть очень простой PHP-скрипт, который обновляет некоторые таблицы в базе данных, но этот процесс занимает много времени (возможно, 10 минут). Поэтому я хочу, чтобы этот сценарий продолжал обрабатываться, даже если пользователь закрыл браузер, потому что иногда пользователи не ждут и закрывают браузер или переходят на другую веб-страницу.

 Roshan Wijesena31 авг. 2011 г., 08:01
Хороший вопрос, братан! +1
 Oguz Bilgic01 нояб. 2009 г., 23:09
Так что, если я хочу отсоединить запрос браузера от выполнения задания, как я могу запросить другой скрипт php, пока пользователь 'Текущий запрос продолжается в обычном режиме. Таким образом, когда пользователь запрашивает какой-либо URL-адрес, этот запрос запускает другой скрипт (который работает независимо от браузера пользователя и других запросов). И пользователь продолжит серфинг на сайте нормально

Ответы на вопрос(7)

ателем), это будет сделано, даже если клиент закрыт.

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

 timdev01 нояб. 2009 г., 22:50
Примечание всегда верно:php.net/manual/en/function.ignore-user-abort.php

РЕДАКТИРОВАТЬ: Кстати, вы уверены, что вы хотите, чтобы страницы, которые открываются в течение 10 минут? Я предлагаю вам использовать очередь задач (элементы которой выполняются cron своевременно) и перенаправить пользователя на "ок я на этом стр.

 timdev01 нояб. 2009 г., 22:55
@shanyu - не уверен, о чем говорит jldupont. Существуют переменные конфигурации для php, которые могут уничтожать долго работающие скрипты, но они абсолютно не связаны с cron.
 jldupont01 нояб. 2009 г., 22:50
... не совсем верно: обычно есть охранникиубийство" долгосрочные скрипты php: они принимают форму записей crontab.
 timdev01 нояб. 2009 г., 22:51
 shanyu01 нояб. 2009 г., 22:53
@jldupont: Я не php парень, но эти сценарии имеют какое-либо отношение к клиенту?
 acSlater13 нояб. 2012 г., 21:55
Это не так, серверный скрипт не всегда выполняется независимо от клиента ...

как клиент прервет соединение (это не будет представлять угрозу безопасности), но только доmax_execution_time (устанавливается в php.ini или через скрипт PHP, обычно 30 секунд по умолчанию).

Например:

<!--?php
    $fh = fopen("bluh.txt", 'w');
    for($i=0; $i<20; $i++) {
        echo $i."<br/-->";
        fwrite($fh,$i."\n");
        sleep(1);
    }
    fclose($fh);
?>

Запустите его в своем браузере и закройте браузер до его завершения. Вы'Вы обнаружите, что через 20 секунд файл содержит все значения.$i

Измените верхнюю границу цикла for на 100 вместо 20, и выон будет работать только с 0 до 29. Из-за PHPmax_execution_time сценарий истекает и умирает.

 ban-geoengineering28 мар. 2018 г., 23:04
Хороший ответ. Но вместо записи в файл, что если скрипт пытается сбросить вывод в браузер - например, используяecho "..."; flush(); ob_flush();? Я думаю, что сценарий будет завершен, так как поток вывода больше не будет доступен.

не используйте браузер для ее непосредственного выполнения. У вас есть много других вариантов:

Используйте cronjob для периодического выполнения задачи.Сделайте так, чтобы запрос браузера вставил новую строку в таблицу базы данных, чтобы обычный cronjob мог обработать новую строку и выполнить скрипт PHP с соответствующими аргументами.Сделайте так, чтобы запрос браузера записал сообщение в систему очередей, в которой подписчик прослушивает такие события (который затем выполняет сценарий).

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

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

 timdev01 нояб. 2009 г., 23:19
Видишь эти пункты? Это все способы сделать это. В большинстве случаев настройка небольшой таблицы базы данных, которая содержит входные данные для фонового процесса, работает нормально. Затем вы можете запустить некоторый PHP-скрипт для выполнения заданий, либо с помощью cron, либо с помощью другого метода.
 timdev01 нояб. 2009 г., 22:58
+1 за гораздо более приятную и конкретную версию моего ответа.
 Oguz Bilgic02 нояб. 2009 г., 23:19
Как я могу выполнить php URL (не скрипт), который был записан в новую строку в базе данных, потому что я использую Framework. поэтому обычная работа cron может обрабатывать
 Oguz Bilgic01 нояб. 2009 г., 23:09
Так что, если я хочу отсоединить запрос браузера от выполнения задания, как я могу запросить другой скрипт php, пока пользователь 'Текущий запрос продолжается в обычном режиме. Таким образом, когда пользователь запрашивает какой-либо URL-адрес, этот запрос запускает другой скрипт (который работает независимо от браузера пользователя и других запросов). И пользователь будет продолжать серфинг на сайте в обычном режиме. Как я могу это сделать?
 timdev02 нояб. 2009 г., 00:30
Вы помещаете запись о работе в очередь в базе данных. Эта запись может содержать любые данные, предоставленные пользователем. Задание cron просматривает очередь, захватывает следующее задание, читает аргументы, предоставленные пользователем, и затем использует эти входные данные для выполнения своей работы. Читать Дэвидавторой пункт пули внимательно. Это'именно то, что вы хотите сделать.
Решение Вопроса

ignore_user_abort

В более широком смысле, у вас, вероятно, здесь проблема с архитектурой.

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

закрыл ли пользователь браузер. По крайней мере, это не такне заметил этого сразу.

Нет: сервер, вероятно (в зависимости от того, как он настроен) выигралt разрешить запуск сценария php в течение 10 минут. На дешевом виртуальном хостинге я бы нене полагайтесь на сценарий, который выполняется дольше, чем разумное время ответа.

используя файл crontab, который содержит время и какую команду для запуска в этом случае это будет скрипт php.

 jldupont01 нояб. 2009 г., 22:49
тот's помимо вопроса, заданного здесь ...

Ваш ответ на вопрос