php - 使用 file_get_contents 在提取 RSS 提要而不是常规 URL 时会使内存过载?

标签 php rss yahoo-finance

我正在从 Yahoo RSS 中挖掘一些数据,但它似乎会造成内存泄漏?这是相当集市。我使用相同的代码对多个来源进行数据挖掘,但 Yahoo RSS 提要是唯一一个使内存过载的来源。这是代码的简化版本,但基本上如果您在多个实例中运行它,它最终会导致服务器崩溃,因为它会耗尽内存:

while(1) {
   $get_rss = file_get_contents("https://feeds.finance.yahoo.com/rss/2.0/headline?s=AAPL&region=US&lang=en-US");
}

但是,如果您使用不同的源代码运行相同的代码,它运行绝对良好且稳定,例如:

while(1) {
   $get_rss = file_get_contents("http://www.marketwatch.com/news/headline/getheadlines?ticker=AAPL&countryCode=US&dateTime=&docId=&docType=2007&sequence=bb90b87a-9f6f-4d70-9a1d-b052088523f5&messageNumber=0&count=10&channelName=%2Fnews%2Fpressrelease%2Fcompany%2Fus%2Faapl&topic=&_=1460832767208");
}

任何人都可以向我解释这种行为吗?我觉得它很集市/怪异。我通常使用 curl 方法来拉取 URL 内容,但切换到此 file_get_contents 以查看其行为是否相同,确实如此。我试过简单的 xml,它也有相同的行为。我不明白?

RSS 文件是否缓存到内存中?我不明白那会如何/为什么会发生。任何有关此问题的帮助/知识将不胜感激

最佳答案

就像@NoPro 建议的那样,您获取 RSS 提要的方式非常不标准,因为它可能被视为攻击,特别是如果您在循环中运行它。第二file_get_contents manual声明它可能会失败,如果

An E_WARNING level error is generated if filename cannot be found, maxlength is less than zero, or if seeking to the specified offset in the stream fails.

因为,您只面临一个特定的 yahoo feed 问题,我想知道您是否受到雅虎服务器的速率限制或限制。它们正在延迟数据包 block 和 file_get_contents 等待更长的时间仍然驻留在内存中。

Bash 脚本比在浏览器上运行它消耗的资源更少。不幸的是,当我在我的本地机器上运行它时,我没有看到内存问题。为什么不在具有不同 IP 池的其他机器或服务器上运行一次。

关于php - 使用 file_get_contents 在提取 RSS 提要而不是常规 URL 时会使内存过载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625698/

相关文章:

php - 使用一张表单上传电子邮件和图像,使用 PHP 将路径和文本存储在数据库中

php - fwrite不写

java:查找网站的RSS文件

python - 定期抓取雅虎财经

ios - ICU 正则表达式文本匹配在 iOS 应用程序的工作流中工作

php - Laravel 5.3 Amazon s3 上传问题

php - Laravel 样式表和 javascript 不会为非基本路由加载

ios - 意外发现 nil URL SWIFT

java - RSS Feed - 在 JAVA 中的描述标签内解析/提取 src 图像标签

Python yFInance api如何获取收盘价而不是调整后的收盘价?