【问题标题】:Download the first 5kb of a file with PHP as plain text?用 PHP 作为纯文本下载文件的前 5kb?
【发布时间】:2019-02-20 16:14:59
【问题描述】:

假设我想用 PHP 从 Internet 上的文件下载一些信息,但我不需要整个文件。因此,通过

加载完整文件
$my_file = file_get_contents("https://www.webpage.com/".$filename);

会占用过多的内存和资源。

有没有办法只下载例如使用 PHP 将文件的前 5kb 作为纯文本?

编辑:

在 cmets 中建议使用例如maxlen arg 为 file_get_contents 或类似的。但是我注意到,对于不同的maxlen,调用的执行时间并没有明显变化,这意味着该函数会加载完整的文件,然后只将一个子字符串返回给变量。

有没有办法让 PHP 只下载所需的字节数,而不是更多,以加快速度?

【问题讨论】:

  • file_get_contentsphp.net/manual/en/function.fread.php 使用maxlen 参数
  • @AbraCadaver 感谢您的建议!我想知道的是,如果这些函数打开一个数据流并从字面上只下载所需的数量,或者如果它们加载完整的东西但只返回一个子字符串到变量?
  • @Kagaratsch 您可以监控您的网络并亲自查看
  • @ADyson 实际上,监控不同maxlen 设置的执行时间(这是我最关心的问题)我发现采用 10 和 10000 长度几乎同时消耗了相同的时间。这意味着,它会加载完整的文件并接受一个子字符串...
  • 理论上fopen > fread 只会读取请求的字节,不会下载不需要的任何内容。在实践中,在各个级别上都会进行大量缓冲,因此您最终会下载比最低要求更多的数据。大多数时候这没什么大不了的,因为缓冲区只有几 kB,而总大小为 MB,但如果你需要读取 8kb 文件的前 5kb,你可能会得到所有文件在某个级别。

标签: php file download


【解决方案1】:
<?php
$fp = fopen("https://www.webpage.com/".$filename, "r");
$content = fread($fp,5*1024);
fclose($fp);
?>

注意:确保allow_url_fopen已启用。

PHP 文档:fopenfread

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多