php – 重定向但仍继续处理exec()
发布时间:2020-12-13 22:26:36 所属栏目:PHP教程 来源:网络整理
导读:此代码示例应该重定向并继续处理长操作,但是在exec命令完成之后它才会重定向.我已经尝试了多种其他方法来做到这一点并没有任何效果.我哪里错了? 我的php.ini中启用了ignore_user_abort() ?phpset_time_limit ( 0 );header ( 'Connection: close' );ob_start
此代码示例应该重定向并继续处理长操作,但是在exec命令完成之后它才会重定向.我已经尝试了多种其他方法来做到这一点并没有任何效果.我哪里错了?
我的php.ini中启用了ignore_user_abort() <?php set_time_limit ( 0 ); header ( 'Connection: close' ); ob_start (); header ( 'Content-Length: 0' ); header ( 'Location: /redirect.php' ); ob_end_flush (); flush (); ignore_user_abort ( true ); exec('command that takes 5 minutes to process'); exit (); ?> 我提前感谢你的帮助. 解决方法
我最近不得不写一个webhook处理程序,它应该在继续处理其他长时间运行的任务之前立即返回“200 OK”响应.
我观察到,当我使用相同的Web服务器进行整个过程时,立即挂起的过程是不可能的.因此,如果您需要发送响应的连接的客户端IP与服务器IP相同,则可能永远无法执行此操作.但是,当传入的连接是真实世界的远程客户端时,它始终有效. 尽管如此,我只是回复了“200 OK”的回复.这与发送重定向不同. 对我有用的代码是…… public function respondASAP($responseCode = 200) { // check if fastcgi_finish_request is callable if (is_callable('fastcgi_finish_request')) { /* * This works in Nginx but the next approach not */ session_write_close(); fastcgi_finish_request(); return; } ignore_user_abort(true); ob_start(); http_response_code($responseCode); header('Content-Encoding: none'); header('Content-Length: '.ob_get_length()); header('Connection: close'); ob_end_flush(); ob_flush(); flush(); } 您可以根据您的情况调整它,并使其设置重定向标题而不是“200 OK”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |