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)&gt;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 类别

H5学习_番外篇_PHP数据库操作

哪些 PHP 函数受 allow_url_fopen 影响?

如何将 allow_url_fopen 更改为 cURL 模式?