Фоновые процессы PHP

dead_code является символом lint, что означает, что вы можете allow на то, что вызывает его.

#[allow(dead_code)]
fn dummy() {}

fn main() {}
41
задан zuk1 5 November 2008 в 23:00
поделиться

7 ответов

Ну, можно использовать" ignore_user_abort (верный)"

, Таким образом, сценарий продолжит работать (следите за продолжительностью сценария, возможно, добавьте" set_time_limit (0)")

, Но предупреждение здесь: Вы не будете в состоянии остановить сценарий с этими двумя строками:

ignore_user_abort(true); 
set_time_limit(0);

Кроме Вас может непосредственно получить доступ к серверу и уничтожить процесс там! (Там, сделанный бесконечный цикл, называя себя много раз, заставил сервер прибыть в визжащую остановку, на кричали...)

50
ответ дан Yuval Adam 23 September 2019 в 15:03
поделиться

Кажется, что у Вас должны быть очередь и внешний сценарий для обработки очереди.

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

преимущество здесь состоит в том, что Вы не запираете апачский поток в течение 10 минут.

26
ответ дан Gary Richardson 23 September 2019 в 15:03
поделиться

У меня было много проблем с этим видом процесса под окнами; Моя ситуация немного отличалась в этом, я не заботился об ответе "сценария" - я хотел, чтобы сценарий запустил и позволил другим запросам страницы проходить, в то время как это было занято, работая далеко.

По некоторым причинам; у меня были проблемы с ним или зависание других запросов или таймаут приблизительно после 60 секунд (и апач и php, были установлены испытать таймаут приблизительно после 20 минут); также оказывается, что Firefox испытывает таймаут после 5 минут (по умолчанию) так или иначе поэтому после той точки Вы не можете знать то, что продолжается через браузер, не изменяя настройки в Firefox.

я закончил тем, что использовал открытый процесс и процесс близкие методы для открытия php в cli режиме как так:

pclose(popen("start php myscript.php", "r"));

Это было бы (использование запуститься), открывают процесс php и затем уничтожают процесс запуска, уезжая php работающий за однако долго, этому было нужно - снова необходимо будет уничтожить процесс для ручного завершения работы его. Этому не были нужны Вы для установки любого времени outs, и Вы могли позволить текущей странице, которая звонила, это продолжает и произвело еще некоторые детали.

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

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

8
ответ дан Christopher Lightfoot 23 September 2019 в 15:03
поделиться

Это может быть полезным, также: Асинхронное должностное лицо оболочки в PHP

6
ответ дан Community 23 September 2019 в 15:03
поделиться

Я думаю, что команда shell_exec - то, что Вы ищете.

Однако это, отключает в безопасном режиме.

ручная статья PHP об этом здесь: http://php.net/shell_exec

существует статья об этом здесь: http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/

5
ответ дан genesis 23 September 2019 в 15:03
поделиться

Существует другая опция, которая можно использовать, выполнить сценарий CLI... Это будет работать в фоновом режиме, и можно даже выполнить его как cronjob, если Вы хотите.

, например,

> #!/usr/bin/php -q

<?php

//process logs

?>

Это может быть установкой как cronjob и выполнит без ограничения времени.... это, примеры для основанной на Unix операционной системы все же.

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

4
ответ дан Polsonby 23 September 2019 в 15:03
поделиться

Вы могли использовать ignore_user_abort() - тот способ, которым сценарий продолжит работать, даже если Вы закроете свой браузер или перейдете к различной странице.

3
ответ дан Greg 23 September 2019 в 15:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: