我有一个网站抓取项目。看看这段代码:
<?php
include('db.php');
$r = mysql_query("SELECT * FROM urltable");
$rows= mysql_num_rows($r);
for ($j = 0; $j <$rows; ++$j) {
$row = mysql_fetch_row($r);
$html = file_get_contents(mysql_result($r,$j,'url'));
$file = fopen($j.".txt", "w");
fwrite($file,$html);
fclose($file);
}
?>
我有一个网址列表。此代码表示使用每个URL中的内容(HTML)生成文本文件。
运行此代码时,我每秒只能生成一个文件[每个文件大小~20KB]。我的互联网提供3mbps的下载速度,但我无法利用这段代码加速。
如何加快file_get_contents()
的速度?或者我如何使用线程或配置php.ini文件或任何其他方法来加速此代码?
答案 0 :(得分:0)
由于这不是重复页面上的建议之一,我将在此处添加。
仔细查看Curl Multi PHP Manual page。
它并非完全直截了当,但一旦你让它以非常快的速度运行。 基本上,您发出多个curl请求,然后收集返回时返回的数据。它以任何顺序返回,因此需要一些控制。 我在数据收集过程中使用它来将处理3-4小时减少到30分钟。
唯一的问题可能是您使用多个请求淹没了网站,并且所有者认为存在问题并禁止您访问。但是,如果你的过程中添加了一些合理的睡眠(),你应该能够将这种可能性降到最低。
答案 1 :(得分:0)
您可以使用流添加少量控件。 但是如果可行的话,cURL应该会好得多。
$stream_options = array(
'http' => array(
'method' => 'GET',
'header' => 'Accept-language: en',
'timeout' => 30,
'ignore_errors' => true,
));
$stream_context = stream_context_create($stream_options);
$fc = file_get_contents($url, false, $stream_context);