我正在制作一个推送通知服务器,它从外部(第三方)html页面收集特定数据,如果我知道我需要的信息是在第一个例如5000个字符,如果我声明MAX_LENGTH,PHP实际上会使用更少的内存吗?或者整个页面是否完全加载到内存中?此外,是否已下载整个html页面,或者一旦达到限制就断开连接? (进而节省数据传输费用)
$html = file_get_contents ("http://.....", false, null, -1, 5000);
感谢。
答案 0 :(得分:2)
在here之后开始挖掘源here,最后到_php_stream_copy_to_mem函数,看起来file_get_contents()
函数实际上会停止读取流达到请求的最大长度。
答案 1 :(得分:2)
是的,因为它在引擎盖下使用流功能,当它达到极限时它实际上会停止。它也在文档页面上说
“file_get_contents()是将文件内容读入字符串的首选方法。如果操作系统支持,它将使用内存映射技术来提高性能。”
所以它实际上应该为你提供所需的提升。
答案 2 :(得分:2)
是的,它确实节省了内存和带宽......我还运行了一个速度测试(这个问题与这个问题并不完全密切相关,但很有用,并建议它确实停止读取流)并进行内存测试以进行演示。我没有进行峰值内存测试,但至少你的$ html变量会存储更少的信息并节省内存。
Time to get ALL characters of remote page 10 times: 6.0368211269379
Time to get ALL characters of remote page 10 times: 6.0158920288086
Time to get ALL characters of remote page 10 times: 5.8945140838623
Time to get ALL characters of remote page 10 times: 8.867082118988
Time to get ALL characters of remote page 10 times: 5.7686760425568
Time to get first ten characters of page 10 times: 4.2118229866028
Time to get first ten characters of page 10 times: 4.5816869735718
Time to get first ten characters of page 10 times: 4.2146580219269
Time to get first ten characters of page 10 times: 4.1949119567871
Time to get first ten characters of page 10 times: 4.1788749694824
Memory Useage First 10 characters:40048
Memory Useage ALL characters:101064