php中怎么实现后台执行?

正文开始

<p>http://www.cnblogs.com/zdz8207/p/3765567.html<br /></p><p><br /></p><p>php中实现后台执行的方法:ignore_user_abort(true); // 后台运行</p>set_time_limit(0); // 取消脚本运行时间的超时上限<br />后台运行的后面还要,set_time_limit(0); 除非在服务器上关闭这个程序,否则下面的代码将永远执行下去止到完成为止。<br />如果程序运行不超时,在没有执行结束前,程序不会自动结束的.=========================================<p>//PHP 中如何 在客户端触发,然后在服务器端执行一个函数,页面关闭也继续执行。要先返回用户请求不要等待时。<br /> <br /> ob_end_clean();#清除之前的缓冲内容,这是必需的,如果之前的缓存不为空的话,里面可能有http头或者其它内容,导致后面的内容不能及时的输出<br /> header("Connection: close");//告诉浏览器,连接关闭了,这样浏览器就不用等待服务器的响应<br /> header("HTTP/1.1 200 OK"); //可以发送200状态码,以这些请求是成功的,要不然可能浏览器会重试,特别是有代理的情况下<br /> //return false;//加了这个下面的就不执行了,不加这个无法返回页面状态,浏览器一直在等待状态,可以关闭,但不是要的效果。<br /> //die(); 或 return ;也一样不执行下面的<br /> //rundata();<br /> //register_shutdown_function("rundata");<br /> //return  ;<br /> ob_start();#开始当前代码缓冲<br />  echo "running,,,,.";<br /> //下面输出http的一些头信息<br /> $size=ob_get_length();<br /> header("Content-Length: $size");<br /> ob_end_flush();#输出当前缓冲<br /> flush();#输出PHP缓冲<br /> <br /> #休眠PHP,也就是当前PHP代码的执行停止,1秒钟后PHP被唤醒,<br /> #PHP唤醒后,继续执行下面的代码,但这个时候上面代码的结果已经输出浏览器了,<br /> #也就是浏览器从HTTP头中知道了服务端关闭了连接,浏览器将不在等待服务器的响应,<br /> #反应给客户的就是页面不会显示处于加载状态中,换句话说用户可以关掉当前页面,或者关掉浏览器,<br /> #PHP唤醒后继续执行下面的代码,这也就实现了PHP后台执行的效果,<br /> #休眠的作用只是让php先把前面的输出作完,不要急于马上执行下面的代码,休息一下而已,也就是说下面的代码<br /> #执行的时候前面的输出应该到达浏览器了<br /> sleep(1);<br /> echo '这里的输出用户看不到,后台运行的';<br /> <br /> //下面代码的任何输出都不会输出给浏览器,因为http连接已经关了,<br /> //所以下面的代码的执行属于后台运行的</p><p> ignore_user_abort(true); // 后台运行,这个只是运行浏览器关闭,并不是直接就中止返回200状态。<br /> set_time_limit(0); // 取消脚本运行时间的超时上限<br /> rundata();</p><p>function rundata(){//do something}</p>=========================================用ignore_user_abort函数实现php计划任务 <br />代码如下:<br /> =======================================int ignore_user_abort ( [bool setting] ) <br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本。<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />setting 参数是一个可选参数。如设置为True,则表示如果用户停止脚本运行,仍然不影响脚本的运行(即:脚本将持续执行);如果设置为False,则表示当用户停止运行脚本程序时,脚本程序将停止运行。<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />下面这个例子,在用户关闭浏览器后,该脚本仍然后在服务器上继续执行:<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />ignore_user_abort(true); // 后台运行<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />set_time_limit(0); // 取消脚本运行时间的超时上限<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />do{<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />sleep(60); // 休眠1分钟<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />}while(true);<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />?><br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />除非在服务器上关闭这个程序,否则这断代码将永远执行下去。<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />-------------------------------------------------------------------------<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />ignore_user_abort(true); // 后台运行<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />set_time_limit(0); // 取消脚本运行时间的超时上限<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />echo 'start.';<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />sleep(1000);<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />echo 'end.';<br style="text-transform: none; background-color: #ffffff; text-indent: 0px; font: 14px/30px Verdana, sans-serif, 宋体; white-space: normal; letter-spacing: normal; color: #434343; word-spacing: 0px; -webkit-text-stroke-width: 0px;" />?>流风,飘然的风,本人博客网站:<a href="http://www.ssqhm.com/" target="_blank">http://www.ssqhm.com</a><br />QQ群: python技术交流群:453879716,人工智能深度学习群:251088643, 有兴趣的可以加入<br /><p>微信公众帐号:双色球预测合买(ssqyuce), 心禅道(xinchandao),天天搞笑开心吧(ttgxkxb)</p><p><br /></p><p><br /></p><p><br /></p><p><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:8.4pt;">ignore_user_abort(true); // 后台运行 function connectionClose($str = null) { $str = ob_get_contents() . $str; // 若实际输出内容长度小于该值将可能导致主动断开失败 header('Content-Length: '. strlen($str)); header("Content-Type: application/json"); header("HTTP/1.1 200 OK"); header('Connection: Close'); ob_start(); echo $str; ob_flush(); flush(); } $data = array("id"=>"0388"); connectionClose(json_encode($data));</pre><br /></p>

正文结束

PHP接口(interface)和抽象类(abstract) php延迟输出内容