PHP 使用 fopen 通过 URL 下载 txt 文件。如何限制下载量?
Posted
技术标签:
【中文标题】PHP 使用 fopen 通过 URL 下载 txt 文件。如何限制下载量?【英文标题】:PHP using fopen to download txt file via URL. How to limit the amount to download? 【发布时间】:2014-11-10 14:57:15 【问题描述】:我写了一个解析这个文本文件的 php 脚本
http://www.powerball.com/powerball/winnums-text.txt
一切都很好,但我希望控制下载量,即我不需要每个结果可能最多前 5 个。目前我正在下载整个文件(这是对内存/带宽的浪费) .
我看到 fopen 有一个应该限制它的参数,但是我放置的任何值都不会影响下载的文本量。
这可以吗?感谢您的阅读。
这是下载文件的相关代码的一个小sn-p。
<?php
$file = fopen("http://www.powerball.com/powerball/winnums-text.txt","rb");
$rows = array();
while(!feof($file))
$line = fgets($file);
$date = explode("Draw Date",$line);
array_push($rows,$date[0]);
fclose($file);
?>
谢谢大家,这是刚刚下载第一行结果的代码
while(!feof($file))
$line = fgets($file);
$date = explode("Draw Date",$line);
array_push($rows,$date[0]);
if(count($rows)>1)
break;
fclose($file);
【问题讨论】:
This:while(!feof($file))
将始终下载,直到到达文件末尾。您需要更改该条件以避免下载整个文件。
当你得到你想要的信息时,只需关闭句柄。不要等到文件结束。
@dynamic 哎呀谢谢。我纠正了错误
【参考方案1】:
您可以在不需要更多数据时中断。在这个例子中当count($rows)>100
while(!feof($file))
$line = fgets($file);
$date = explode("Draw Date",$line);
array_push($rows,$date[0]);
if (count($rows)>100)
break;
【讨论】:
在while循环里面也可以加上$string .= $line; $sizeInKB = number_format(strlen($string) / 1024, 2);
$sizeInKB会保存当前下载量。 Here are more calculations for different units besides KB【参考方案2】:
问题在于,只有在您通读到文件末尾后,您的 while 条件才会得到满足。如果您只想获得前 N 行,则需要更改该条件。这样的事情可能会帮助您入门:
$lineCountLimit = 5;
$currentLineCount = 0;
while($currentLineCount < $lineCountLimit)
$line = fgets($file);
$date = explode("Draw Date",$line);
array_push($rows,$date[0]);
$currentLineCount++;
【讨论】:
【参考方案3】:请尝试以下方法仅下载文件的一部分,例如先下载 10 KB,然后拆分为行并分析它们。 How to partially download a remote file with cURL?
【讨论】:
以上是关于PHP 使用 fopen 通过 URL 下载 txt 文件。如何限制下载量?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 通过fopen获取URL的内容并将fread转换为变量
fopen() file_get_contents() 通过url获取链接内容
TYPO3:通过 URL 中的参数过滤 tx_news 类别