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