php 的一个bug

 

Bug描述
在使用file_get_contents($ur);请求一个$url 时,如果server在http请求头还没有完全输出时就意外关闭了连接,则file_get_contents($ur)将因无法读取完整的数据而陷入死循环,这时,进程占用cpu约 100%

影响版本
本次故障出现在PHP-5.3.3 ,相信此前的版本中应该也存在;以后的版本就不得而知了

Bug重现方法

server.php

 

client.php

 

在A终端模拟server端:

 

在B终端执行client.php

在C终端观察client.php 的执行情况

使用gstack查看堆栈状况:

使用gdb分析,参看脚本: php-5.3.3/ext/standard/http_fopen_wrapper.c

可以通过: https://svn.php.net/repository/php/php-src/tags/ 直接查看,在php5.4中还没有修复该bug

 

 


解决办法

提交bug 到 php.net, bug地址: https://bugs.php.net/bug.php?id=63338

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据