Php 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

因为在网络上爬行可能会花费很多时间,所以我想让pcntl_fork()帮助我创建多个孩子,将代码拆分成多个部分

  • 主-在域中爬行
  • 子级-当接收链接时,子级必须对域上找到的链接进行爬网
  • 子级-必须执行与2相同的操作。当收到新链接时
  • 我可以想做多少就做多少,还是我必须设定最多孩子数

    这是我的密码:

    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,但祝您好运:)