作者LaPass (LaPass)
看板PHP
标题[请益] 在程式结束前断开连结
时间Thu Sep 12 00:53:51 2013
//一些有的没的
(略)
//显示完成页面
require('view.php');
//强制显示
ob_flush();
flush();
set_time_limit(120);
//这理是处理可能比较花时间的事情
//我用个sleep(60)来当作代表 (php.ini已经把timeout改成120)
sleep(60);
//结束
exit();
因为有个动作很花时间,所以我打算先把页面印出来
(里面含有重新导向的东西)
但是页面印出来之後
浏览器上虽然看的到页面,但是整个页面会停住不动
载入中的图示也一直转啊转的....
直到sleep结束为止,才会重新定向跳页过去
我想请问要怎麽解决这个问题?
我希望的是SERVER端直接把连结断开,然後继续把工作做完
而不是卡个跟client端的连线在那边....
然後,我要的也不是ajax,因为我所做的动作是去远端的SERVER抓东西进来
并更新一些资料库的数据,要是client端随断线我也会很困扰.....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.252.122.207
1F:推 PsMonkey:是我看不懂吗? 我觉得这用 AJAX 很合理阿? 09/12 00:56
2F:→ LaPass:fastcgi_finish_request(); 找到了,是用这个 XD 09/12 01:10
3F:→ LaPass:1F,就是,要做的是SERVER端的工作,而用户根本不需要知道 09/12 01:12
4F:→ LaPass:、看到server要做什麽东西那样。 09/12 01:12
5F:→ LaPass:如果是java的话我就开条执行绪去跑了 09/12 01:13
6F:→ danny8376:原本想先问伺服器端到底怎跑的www 如果用fastCGI的话 09/12 01:25
7F:→ danny8376:确实是用那个XD 如果是挂apache的module要看 09/12 01:25
8F:→ danny8376:是不是被deflate之类的buffer住了~~~ 09/12 01:26
9F:→ ousapas:如果真的是很花时间的程式 可以用个job queue来处理 09/12 01:27
10F:推 johnny1972:fastcgi_finish_request()必须web是跑fastcgi模式 09/12 01:29
11F:→ johnny1972:如果是走apache2+mod_php就得用别的解法 09/12 01:30
12F:→ johnny1972:要小心register_shutdown_function跟destructor都不会 09/12 01:33
13F:→ johnny1972:被输出到client去,所以有可能影响到一些设计 09/12 01:34
14F:→ LaPass:我记得我是用apache2 orz.... 09/12 01:36
15F:→ LaPass:在写的时候是用xamp,不过实际在跑SERVER是apache2.... 09/12 01:37
16F:→ danny8376:apache不是重点 是PHP到底怎跑 这方法只对PHP-FPM有效 09/12 01:38
17F:→ LaPass:SERVER那边试过了,找不到fastcgi(略).... orz 09/12 01:58
18F:→ danny8376:那就用header的connection:close + content-length吧 09/12 03:16
19F:→ danny8376:记得要设法取消掉server上各种可能的buffer 09/12 03:16
20F:→ changic:费时的处理←如果完全不需要输出给client的话 09/12 09:59
21F:→ changic:能将成是拆成两个部分,费时处理的部分独立用CLI方式~? 09/12 10:00
22F:→ LaPass:谢谢各位给的关键字,我去研究一下 09/12 13:46
23F:推 johnny1972:如果是用买的WebHost没办法自己挂其他东西的话还有几招 09/12 15:20
24F:→ johnny1972:要看WebHost上限制多大决定需不需要搭配一点点AJAX 09/12 15:28
25F:→ johnny1972:若可以用fopen/file_get_contents http或curl就不需要 09/12 15:30