PHP Перенаправление пользователя и продолжение сценария процесса

Я хочу, чтобы скрипт перенаправлял пользователя так быстро, как только мог, и продолжал данные процесса после перенаправления пользователя. Я нашел это в google, но это не работает. Он ждет 10 секунд до перенаправления. Кажется, что пользователю нужно дождаться завершения скрипта до того, как браузер станет прямым.

<?PHP store data $userAgent = $_SERVER['HTTP_USER_AGENT']; $user_ip=$_SERVER['REMOTE_ADDR']; //Redirect to google header("Location: http://www.google.com"); //Erase the output buffer ob_end_clean(); //Tell the browser that the connection's closed header("Connection: close"); //Ignore the user's abort (which we caused with the redirect). ignore_user_abort(true); //Extend time limit to 30 minutes set_time_limit(1800); //Extend memory limit to 10MB ini_set("memory_limit","10M"); //Start output buffering again ob_start(); //Tell the browser we're serious... there's really //nothing else to receive from this page. header("Content-Length: 0"); //Send the output buffer and turn output buffering off. ob_end_flush(); //Yes... flush again. flush(); //Close the session. session_write_close(); //After redirection no need to send any data to user anymore. //User would It's seem that user need to wait till script is finish before browser can be direct. //Do some work //sleep(10); $matched = $wurflObj->getDeviceCapabilitiesFromAgent($userAgent); $org = geoip_org_by_name($user_ip); ?> 

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

Я не уверен в этом, но верно ли, что браузеры будут перенаправлять сразу после получения заголовка Location? Или это происходит, когда соединение завершается? Используйте Firebug, чтобы узнать, что делает сетевое подключение, и посмотрите, печатает ли эти заголовки до 10 секунд, или если оно появляется через 10 секунд.

В мире Ruby on Rails предпочтительным решением является отправка задания на сервер «задержка» или «перезапуск» для запуска; это позволяет избежать длительных процессов на веб-сервере, которые должны быть доступны для обработки веб-запросов.

Причина, по которой он ждет, связана с линейным sleep(10) . Удалите это, и он должен идти со скоростью, которую вы ожидаете.

sleep(10) ближе к концу вашего кода может быть причиной.

Если вы хотите, чтобы работа выполнялась в фоновом режиме, у вас есть несколько вариантов.

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

Только PHP не может выполнять асинхронную работу, как вы хотите.

  Sleep(10) 

вызывает 10-секундное ожидание. Я не уверен, что это даже делает. Но удалите это, и с вами все будет в порядке!

Я предполагаю, что 10-секундное ожидание было там как пример «выполнения некоторой работы».