长时间运行PHP scraper返回500内部错误


Long running PHP scraper returns 500 Internal Error

大多数时候我在谷歌上找到问题的答案,但现在我被卡住了。我正在做一个刮板脚本,它首先刮一个网站的一些用户名,然后得到用户的每一个细节。有两个抓取器,第一个通过主页,获得名字,然后获得个人资料页面的详细信息,然后进入下一个页面……我抓取的第一个网站总共有64个名字,显示在一个主页上,而第二个网站有4个页面,显示了超过365个名字。

第一个工作得很好,但是第二个一直给我500个内部错误。我试着限制剧本,只刮几个名字,这就像魅力一样,所以我更确定剧本本身是好的!max_execution_time在我的php ini文件设置为1500,所以我想这也不是问题,但是有一些东西导致错误…不确定是否在每10个名字之后添加一个睡眠命令,例如将解决我的情况,但是,我现在正在尝试!

所以如果你们有任何想法可以帮助解决这种情况,我将非常感谢你的帮助!

提前感谢,z

支持说我可以将内存提高到4gb

典型的金钱欺诈支持答案。节省你的现金& &;写更好的代码,因为你所做的事情可以很容易地从一个免费的虚拟主机提供商的共享服务器上运行,即使他们有严格的资源限制。

首先作为一个作业获取/更新用户列表,然后作为另一个作业以较小的批量提取详细信息。使用SQL BULK Insert命令减少与数据库的连接。它也比循环遍历单个insert要快得多。

Usernames and details本质上是一个静态列表,因此不必急于实时获取所有数据。只需使用cronjob获取详细信息,最终脚本将赶上添加到传入列表中的新用户名,您最终将获得一个更快,更精简的系统。

这绝对是内存问题。您的一个变量正在增长超过您在php.ini中定义的内存限制。如果您确实需要存储大量数据,我建议定期将结果写入文件和/或DB(然后释放变量),而不是在运行时将它们全部存储在内存中。

  1. 获取用户详细信息
  2. 转储到文件
  3. 明确var
  4. 重复…

如果你设置你的执行时间为无穷大,并定期转储变量到文件/db,你的php脚本应该运行几个小时。