【问题标题】:PHP file get contents hangs - why timeout doesnt work and how to fixPHP file_get_contents 挂起 - 为什么超时不起作用以及如何修复
【发布时间】:2016-12-06 20:02:52
【问题描述】:

我有一些从其他站点获取图像的服务器。 工作几个月后。 Apache 每隔几个小时就开始崩溃。 (见帖子底部的配置)

在代码中使用日志记录的调查表明,有时 file_get_contents 会挂起,从而使 apache 进程永远处于 W 状态。已挂起的已提取文件的示例 URL:https://www.mxstore.com.au/assets/thumb/3104041-c.jpg

我在 3 个位置设置了超时,但 Apache 进程仍然永远挂起

set_time_limit (10);
ini_set('default_socket_timeout',10);

而且在上下文中(参见 timeout=>3):

$opts = array( 'http'=>array('header'=>" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0" ,'timeout'=>3 ) );
$context = stream_context_create($opts);
$data=  file_get_contents($product[p_img], false, $context,-1,1500000); 

我怎样才能使超时工作和/或理解为什么没有获取图像?

配置: PHP 版本 5.5.9-1ubuntu4.19 Apache/2.4.7 (Ubuntu) Apache API 版本 20120211

【问题讨论】:

  • 你试过使用CURL吗?它可能会让你有更多的控制权。
  • 我需要让它工作,因为它是一个现有的解决方案。转向 curl 意味着我想通过理解/解决问题来避免许多测试
  • 设置超时可能不起作用,除非它在 ​​pho.ini 文件中允许。

标签: php apache file-get-contents


【解决方案1】:

不幸的是,我的所有搜索都没有找到解决方案。我为调用实现了 Curl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2015-07-02
    • 2012-12-30
    • 1970-01-01
    • 2012-08-30
    • 2013-06-30
    • 2012-06-22
    相关资源
    最近更新 更多