Фоновый процесс PHP все еще влияет на загрузку страницы

Поэтому я нашел несколько руководств / руководств для запуска php-скрипта в качестве фонового процесса, но независимо от того, какой код я использую, процесс по-прежнему отображается в браузере.

То, что я делаю, запускает скрипт, который может занять 5-10 секунд (зависит от стороннего API). Я помещал триггер в самую нижнюю часть страницы, чтобы страница выглядела полностью, но я заметил, что в строке состояния браузера по-прежнему отображается страница как загрузка до запуска скрипта. Кроме того, Firebug показывает одно (случайное?) Изображение в качестве загрузки до тех пор, пока скрипт php не будет полностью запущен. Я могу просмотреть сценарий top и он работает как отдельный процесс. Как я могу заставить браузер перестать ждать, пока он закончит?

Код, который я использую в настоящее время:

 shell_exec('sleep 30 >/dev/null 2>/dev/null &'); 

Я также попытался использовать exec (), но не было никакой разницы.

Отказ от ответственности: мой последний код будет использовать /usr/bin/GET , сон просто должен быть очевиден в том, что происходит.

Вот довольно минимальное решение, основанное на http://php.net/features.connection-handling#71172 :

 <?php ob_end_clean(); ob_start(); ?> <!doctype html> <html> <head> <title>sleep test</title> </head> <body> <h1>sleep test</h1> <p>going to sleep</p> </body> </html> <?php $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); $start = date(DATE_RSS); sleep(10); file_put_contents('sleep-test.txt', $start."\n".date(DATE_RSS)); ?> 

Попытка добавления nohup перед командой. Вам нужно, чтобы PHP отключился от процесса и продолжил работу. Обычно, если родительский процесс завершается, дочерний процесс убивается. nohup предотвратит это, а также не позволит php ожидать завершения дочернего процесса.

 shell_exec('nohup sleep 30 >/dev/null 2>&1 &'); 

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

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

 ob_end_flush(); ignore_user_abort(1); 

эти две функции помогут вам, если я правильно пойму вашу проблему.

В настоящее время это невозможно.