foreach循环中的PHP simple_html_dom和file_get_html。如何加快解析时间?

时间:2015-07-30 07:30:35

标签: php sockets loops foreach simple-html-dom

我在foreach循环中使用PHP simple_html_dom和file_get_html,循环次数约为4,000次。

这就是我正在做的事情。我从同一主机上的多个网址中提取内容。

同一台主机上共有4,000多个网址。 example.com

示例网址:example.com/product.php?prod=00283

在循环example.com/product.php?prod=03418

的下一次传递中

循环example.com/product.php?prod=08192的下一次传递

等等,直到所有4000多个网址都被覆盖。

经过测试的100个网址需要花费1分半钟来解析并输出内容。

是否可以在foreach循环中设置多线程方法以同时恢复所有4000个网址的内容?

换句话说,我是否使用套接字或其他类型的多线程方法并行迭代所有网址?

以下是我的示例代码,以便您了解我在这里做的事情。

include 'simple_html_dom.php';

$partlist_file = 'parts.txt';

$partlist = file('partnumberlist.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$stock = '';

    $isFirst = true;
    $firstline = 'sku,qty,visibility,is_in_stock' . "\n";
    $output_first = '';
    foreach($partlist as $parts => $part) {

        $html = file_get_html('example.com/product.php?prod=' . $part);
        $ret = $html->find('span#cph_lb_stock_buy'); 

        foreach($ret as $element) {
            $stock = $element->plaintext;
            $stock = preg_replace(array('/\\n/','/\\r/'),'',$stock);
            $stock = trim($stock);
            if($stock == 'Not in stock.') {
                $stock = '0,1,0';
            } elseif($stock == 'In Stock & Ready to Ship!') {
                $stock = '4,4,4';
            }

        if ($isFirst) {
          $output = $firstline;
          $isFirst = false;
        }

        $output .= 'K' . $part . ',' . $stock . "\n";


        }
    }
    //print_r (trim($output,"\n"));
    file_put_contents($partlist_file, trim($output,"\n"));

0 个答案:

没有答案