我在使用PHP的file_get_contents函数时遇到了一些问题。
我的设置基本如下: - >从php页面(我们称之为a.php),POST请求通过file_get_contents发送到另一个php页面(b.php)。
- > b.php用POST输入做一些事情,然后通过file_get_contents向自己发送另一个POST请求(b.php)
- >这重复了几次(例如4次),所以基本上看起来像这样:
a.php - > POST请求通过file_get_contents - > b.php - > POST请求通过file_get_contents - > b.php - > POST请求通过file_get_contents - > b.php - > POST请求通过file_get_contents - > b.php
在b.php的最后一个帖子请求中,该脚本向“海报”回应了一些东西,他向它添加了一些内容等等。一直回到a.php。
为了清楚起见:在生产中,所有这些php文件都将位于不同的服务器上,并且每个服务器在此过程中都有附加价值。
然而,为了测试,所有页面都在同一台服务器上(我在URL中添加“?server = x”,以便同一文件在每次“调用”时使用不同的数据库)。
这就像一个魅力:) ...除非有超过5个file_get_contents同时“活跃”... 这很好用: a.php-> b.php-> b.php-> b.php-> b.php 这不是: a.php-> b.php-> b.php-> b.php-> b.php-> b.php 事实上,它崩溃了我的服务器(不再响应任何http请求),只重新启动Apache“deblocks”它。 当我从浏览器加载工作“电路”a.php-> b.php-> b.php-> b.php-> b.php不同时间时,也会发生同样的情况。
Apache错误日志中的错误:
failed to open stream: HTTP request failed!
我认为它可能与POST大小太大有关,但是通过a.php-> b.php-> b.php-> b.php-> b发送一个巨大的POST请求.php电路工作正常......
所以看起来只允许同时使用5个file_get_contents ......
任何人都有一些想法?
编辑:如下所述,看起来真正的问题是死锁,这在PRD中不会发生,因为在同一台服务器上没有“循环”...我通过使用CURL代替了一个解决了这个问题超时。当发生死锁风险时,卷曲请求只是超时而不冻结服务器。 然而,我仍然对这个问题的答案感兴趣:如何在Apache2中检查/重新配置同时请求的数量?它不在conf文件中。 谢谢!!!答案 0 :(得分:0)
在这种情况下,我建议使用CURL而不是file_get_contents - 尽管我在使用会话时除了(!)之外从未遇到过这个问题,因为它们会锁定进程直到会话关闭。