今天在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
.....
?>
转:http://blog.csdn.net/yysdsyl/article/details/4636457