Php pcntl_fork()函数
因为在网络上爬行可能会花费很多时间,所以我想让pcntl_fork()帮助我创建多个孩子,将代码拆分成多个部分Php pcntl_fork()函数,php,web-crawler,pcntl,Php,Web Crawler,Pcntl,因为在网络上爬行可能会花费很多时间,所以我想让pcntl_fork()帮助我创建多个孩子,将代码拆分成多个部分 主-在域中爬行 子级-当接收链接时,子级必须对域上找到的链接进行爬网 子级-必须执行与2相同的操作。当收到新链接时 我可以想做多少就做多少,还是我必须设定最多孩子数 这是我的密码: class MyCrawler extends PHPCrawler { function handlePageData(&$page_data) { // CHECK DOMEIN
class MyCrawler extends PHPCrawler
{
function handlePageData(&$page_data)
{ // CHECK DOMEIN
$domain = $_POST['domain'];
$keywords = $_POST['keywords'];
//$tags = get_meta_tags($page_data["url"]);
//$iKeyFound = null;
$find = $keywords;
$str = file_get_contents($page_data["url"]);
if(strpos($str, $find) == true && $page_data["received"] == true)
{
$keywords = $_POST['keywords'];
if($page_data["header"]){
echo "<table border='1' >";
echo "<tr><td width='300'>Status:</td><td width='500'> ".strtok($page_data["header"], "\n")."</td></tr>";}
else "<table border='1' >";
// PRINT EERSTE LIJN
echo "<tr><td>Page requested:</td><td> ".$page_data["url"]."</td></tr>";
// PRINT STATUS WEBSITE
// PRINT WEBPAGINA
echo "<tr><td>Referer-page:</td><td> ".$page_data["referer_url"]."</td></tr>";
// CONTENT ONTVANGEN?
if ($page_data["received"]==true)
echo "<tr><td>Content received: </td><td>".$page_data["bytes_received"] / 8 . " Kbytes</td></tr></table>";
else
echo "<tr><td>Content:</td><td> Not received</td></tr></table>";
$domain = $_POST['domain'];
$link = mysql_connect('localhost', 'crawler', 'DRZOIDBERGGG');
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("crawler");
if(empty($page_data["referer_url"]))
$page_data["referer_url"] = $page_data["url"];
strip_tags($str, '<p><b>');
$matches = $keywords;
//$match = preg_match_all("'/<(*.?)(*.?)>(*.?)'".$keywords."'(*.?)<\/($1)>/'", $str, $matches, PREG_SET_ORDER);
//echo $match;
$doc = new DOMDocument();
$doc->loadHTML($str);
$xPath = new DOMXpath($doc);
$xPathQuery = "//text()[contains(translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), '".strtoupper($keywords)."')]";
$elements = $xPath->query($xPathQuery);
if($elements->length > 0){
foreach($elements as $element){
print "Gevonden: " .$element->nodeValue."<br />";
}}
$result = mysql_query("SELECT * FROM crawler WHERE data = '".$element->nodeValue."' ") ;
if(mysql_num_rows($result)>0)
echo 'Column already exist';
else{
echo 'added';
mysql_query("INSERT INTO crawler (id, domain, url, keywords, data) VALUES ('', '".$page_data["referer_url"]."', '".$page_data["url"]."', '".$keywords."', '".$element->nodeValue. "' )");
}
echo '<br>';
echo "<br><br>";
echo str_pad(" ", 5000); // "Force flush", workaround
flush();
}
类MyCrawler扩展了PHPCrawler
{
函数handlePageData(&$page_数据)
{//登记
$domain=$_POST['domain'];
$keywords=$_POST['keywords'];
//$tags=get_meta_标记($page_data[“url”]);
//$iKeyFound=null;
$find=$keywords;
$str=文件获取内容($page\u data[“url”]);
if(strpos($str,$find)==true&$page_数据[“已接收”]==true)
{
$keywords=$_POST['keywords'];
如果($page_data[“header”]){
回声“;
echo“状态:”.strtok($page_data[“header”],“\n”)。”;}
否则";;
//打印EersteLijn
echo“请求的页面:.$Page_数据[“url”]。”;
//打印状态网站
//打印网页
echo“Referer page:.$page_data[“Referer_url”]”;
//内容是什么?
如果($page_data[“received”]==true)
echo“接收到的内容:“.$page_data[“bytes_received”]/8.“Kbytes”;
其他的
回显“内容:未收到”;
$domain=$_POST['domain'];
$link=mysql_connect('localhost','crawler','DRZOIDBERGGG');
如果(!$link)
{
die('无法连接:'.mysql_error());
}
mysql_选择_数据库(“爬虫”);
if(空($page\u data[“referer\u url”]))
$page_data[“referer_url”]=$page_data[“url”];
带标签($str,);
$matches=$keywords;
//$match=preg_match_all(“'/(*?)”)“$keywords.”(*?)/“,$str,$matches,preg_SET_ORDER);
//回声$匹配;
$doc=新的DOMDocument();
$doc->loadHTML($str);
$xPath=新的DOMXpath($doc);
$xPathQuery=“//text()[包含(翻译(,'abcdefghijklmnopqrstuvxyz','abcdefghijklmnopqrstuvxyz'),'”.strtoupper($keywords)。“)];
$elements=$xPath->query($xPathQuery);
如果($elements->length>0){
foreach($elements作为$element){
打印“Gevonden:”.$element->nodeValue.”; }} $result=mysql_查询(“从爬网程序中选择*,其中数据=””。$element->nodeValue。“”; 如果(mysql_num_rows($result)>0) 回显“列已存在”; 否则{ echo“添加”; mysql_查询(“插入爬虫程序(id、域、url、关键字、数据)值(“”“,”$page_data[“referer_url”]。”,“$page_data[“url”]。”,“$keywords.”,“$element->nodeValue.”); } 回声“
”; 回声“
”; echo str_焊盘(“,5000);/“强制冲洗”,解决方法 冲洗(); } 忘了说:我需要一个winx(86)32位解决方案
因为我的客户不支持它。我想知道,如果您选择这样的产品,您是否会得到更好的服务
它是一个作业管理器,运行在您的系统上,您向它提交作业(如果您愿意,可以通过php),然后它将作业分配给工作人员(同样是用php编写的),然后报告他们的结果。它非常健壮和灵活,因为您可以让它运行更多的工作人员来处理更多的工作负载。shell_exec做了这件事,但不知道如何使用。看看这个:注释2全部:在代码中寻找有趣的词并赢得一些大奖!很好,但这不是我要找的地方;)+1.无论如何,如果一切都必须在win32上运行,那么是的,Gearman目前不适合。恐怕我无法帮助您使用pcntl_fork,但祝您好运:)