我在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"));