Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何加快文件获取内容的速度()?或者任何其他方式_Php_Performance_Download_File Get Contents - Fatal编程技术网

Php 如何加快文件获取内容的速度()?或者任何其他方式

Php 如何加快文件获取内容的速度()?或者任何其他方式,php,performance,download,file-get-contents,Php,Performance,Download,File Get Contents,我有一个网站刮项目。请看以下代码: <?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($

我有一个网站刮项目。请看以下代码:

<?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列表。这段代码意味着,使用每个url的内容(HTML)创建文本文件

运行此代码时,我每秒只能生成一个文件[每个文件大小~20KB]。我的互联网提供了3mbps的下载速度,但我不能利用这个代码的速度


如何加速
文件获取内容()
?或者如何使用线程或配置php.ini文件或任何其他方法来加速此代码?

由于这不是重复页面上的建议之一,我将在此处添加它

仔细看看Curl Multi

这并不完全是直截了当的,但一旦你让它运行起来,它会非常快。 基本上,您可以发出多个curl请求,然后在返回时收集返回的数据。它以任意顺序返回,因此需要一些控制。 我已经在数据收集过程中使用了它,将3-4小时的处理时间减少到30分钟


唯一的问题可能是你用多个请求淹没了一个站点,而所有者认为这是一个问题,并禁止你访问。但是,在流程中添加一点合理的sleep(),您应该能够将这种可能性降至最低。

您可以在流中添加一些控件。 但如果可以的话,卷曲应该更好

$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);

嗨,为了将来的参考,永远记住谷歌第一!搜索
php加速文件\u get\u contents()
会返回一系列有用的结果,其中包括许多堆栈溢出。1秒限制的可能重复可能与DNS有关,因此无法解决。请看这里的主要问题是一个站点不能超载。如果涉及多个域,则对这些域的请求应随机化,例如,不要遍历第一个域,然后遍历第二个域等,而是将它们混合。这样,性能也将得到改善。