现在的位置: 首页 > 综合 > 正文

浏览器(或客户端)触发,后台运行php脚本

2013年09月22日 ⁄ 综合 ⁄ 共 1014字 ⁄ 字号 评论关闭

今天在0fees.net上申请了个免费的php空间,然后把前两天折腾的csdn博客文章抓取程序和csdn博客用户爬取程序放上去了,虽然空间是国外的,不过速度还算可以。

 

既然有了现成的空间可用,于是就打算把正在进行的爬取程序放服务器上运行,不过试的过程中遇到这样的问题,就是:我从浏览器这端触发服务器上的php脚本,要想让服务器端的php脚本一直执行,我得把该网页一直开着,这样就达不到我不开电脑不开网页进行爬取的目的,因此查找了些资料,得知 ignore_user_abort() 函数可以帮忙搞定这个问题。下面是php内部处理连接的说明:

 

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常)

1 - ABORTED(异常退出)

2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限(请参阅 set_time_limit() 函数)时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

 

 

针对性的修改了爬取程序的代码,达到了浏览器触发后台执行php程序的目的

<?php

/////
ob_start();
set_time_limit(0);
ignore_user_abort(TRUE);
header("Content-Type:text/html; charset=utf-8");
header("Connection: close");
ob_end_flush();
flush();

 

////crawl code

.....

 

?>

抱歉!评论已关闭.