我会用我的程序在做什么开始。 控制器的索引函数接受DB URL和关键词和存储它们的阵列。 现在crawlLink法把所有的关键字和网址。 该网址中搜索所有的关键词和生成的所有URL的子链路,并再次存储在DB这也是搜索的关键字。 关键词进行搜索,使用搜索方法的各个环节。 该子链路的使用extract_links功能的所有URL中提取。 搜索和extract_links都有一个方法叫做get_web_page这需要使用卷曲的页面的完整内容。 get_web_page在搜索功能使用一次得到网页的内容等关键字,可以从中提取。 它也可以用来在extract_links函数提取与有效的页面内容的链接。
现在crawlLink调用搜索功能的两倍。 一旦从中提取域链接和第二次关键字来从子链路提取关键词。 因此,get_web_page被称为三次。 这大约需要5分钟,得到大约150链接的内容。 因此,这需要15分钟的处理时间,它被称为三次。 在那段时间没有什么可以做。 因此,我想在后台运行这个过程,并显示其状态在处理。 extract_links和get_web_page使用include_once包括在控制器。
该get_web_page功能如下:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle compressed
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
一旦从用户的URL和关键字的输入可以被看作是一个任务。 现在,这个任务可以启动,并开始在后台运行。 同时另一个任务可以被定义并可以启动。 每个任务都会有类似“要不要”,“进行中”,“待定”,“完成”等状态简单的任务,董事会由奥斯卡·迪亚斯是我要显示任务的确切方式。
我读这么多的方式在后台运行功能,现在我是左右为难关于哪种方法采用的是。 我读到关于高管,pcntl_fork,使用Gearman等,但都需要CLI,我不想使用。 我尝试使用Cygwin安装的Gearman但被困在Gearman的安装,因为它无法找到的libevent。 我已经单独安装了libevent但它仍然无法正常工作。 和Gearman的需要CLI所以放弃了它。 我不想使用cron也。 我只是想知道哪种方法将是最好的我的情况。
我使用PHP 5.3.8 | 笨2.1.3 | 阿帕奇2.2.21 | MySQL的5.5.16 | Windows 7的64位