首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pcntl_fork()函数

pcntl_fork()函数
EN

Stack Overflow用户
提问于 2010-09-14 07:41:02
回答 3查看 936关注 0票数 2

因为爬行web可能会花费大量时间,所以我想让pcntl_fork()帮助我创建多个子程序,将代码分成几部分。

  1. 主爬行域
  2. 子-当接收到链接时,子必须爬行在域上找到的链接。
  3. 子-在接收新链接时必须与2相同。

我能做多少我想做多少,还是我必须设置一个最大的孩子?

这是我的密码:

代码语言:javascript
复制
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();



}

忘记说:我需要一个胜利x(86) 32位解决办法!

因为我的客户不支持。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-21 07:31:03

shell_exec做了这件事,但不知道如何使用。

票数 0
EN

Stack Overflow用户

发布于 2010-09-14 07:44:59

我想知道,如果你能得到更好的服务,用像吉尔曼这样的东西。

它是一个运行在您的系统上的作业管理器,您向它提交作业(如果您愿意的话通过php),然后它将它们分配给工人(同样,用php编写),这些工人然后报告他们的结果。它非常健壮和灵活,因为您可以让它运行更多的工作人员来处理更多的工作。

票数 1
EN

Stack Overflow用户

发布于 2010-09-21 20:03:51

看看这个:http://in.php.net/manual/en/ref.pcntl.php#37369

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3706912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档