PHP5一直以来的bug!

原创 2004年08月25日 18:18:00

  PHP5加入了很多新性能,这里不加多评。我只是观测到一个PHP5在windows操作系统上(尤其是2000、2003)上的一个现象:

  默认安装、配置情况下,在100个用户读取一个较大php文件的时候,在error.log文件你会发现不定期的启动信息:

[Wed Aug 25 17:59:15 2004] [notice] Apache/2.1.0-dev (Win32) PHP/5.0.2-dev configured -- resuming normal operations
[Wed Aug 25 17:59:15 2004] [notice] Server built: Aug 25 2004 16:03:58
[Wed Aug 25 17:59:15 2004] [notice] Parent: Created child process 988
[Wed Aug 25 17:59:15 2004] [notice] Digest: generating secret for digest authentication ...
[Wed Aug 25 17:59:15 2004] [notice] Digest: done
[Wed Aug 25 17:59:15 2004] [notice] Child 988: Child process is running
[Wed Aug 25 17:59:15 2004] [notice] Child 988: Acquired the start mutex.
[Wed Aug 25 17:59:15 2004] [notice] Child 988: Starting 250 worker threads.
[Wed Aug 25 17:59:15 2004] [notice] Child 988: Starting thread to listen on port 8000.
[Wed Aug 25 17:59:15 2004] [notice] Child 988: Starting thread to listen on port 80.

  想想看:你肯定默认设置MaxRequestsPerChild=0。按照Apache2官方的说法,child process应该是永不退出才对。问题就出来了。为什么会自动重启呢?究竟是Apache2的bug还是PHP5的bug?那么继续往下看,你就会发现是什么回事。

  有了问题总需要找到解决方案。深入代码学习是一种最好的办法。PHP与Apache2的结合是php5apache2.dll文件。首先去掉php的支持,看看静态文本会不会造成同样的问题(这是一个非常愚蠢的想法)。因为Apache2本身对html文件支持是绰绰有余,而且在同类的web产品中,Apache2的这方面的性能恰恰最出众。如果要实际测试会不会出现这样的问题,那么找一个大的静态文本,远程用ab命令测试,比如:ab -n2000 -c64 -dS http://172.16.2.1。结果表明没有任何问题,就正如所推理的那样。

  结果就出来了,肯定是PHP5与Apache2的结合出了问题。找到PHP5的Apache2的handler程序。打开sapi_apache2.c。Apache2重启证明有abort产生,我们就找abort字符。果不然发现两个r->connection->aborted。同时在google上一搜索,发现类似于这样的bug report:http://bugs.php.net/bug.php?id=14542。如果不熟悉php的源代码编程,那么你直接将两个“ || r->connection->aborted”去掉,然后编译就会发现:问题解决了。

  想想整个过程,思维最为重要。往往在没有头绪的时候往往需要认真思索。

PHP5多层继承顺序的bug

作者: Laruence(   ) 本文地址: http://www.laruence.com/2008/08/24/427.html 转载请注明出处 今天guoxiaod提出了一个问题,如下: ...
  • walxiaosage
  • walxiaosage
  • 2015年08月24日 11:33
  • 222

从PHP5到PHP7的注意事项

原文地址:https://www.phpxy.com/article/25.html PHP7是大势所趋了。PHP7有更多的新特性,更好的性能,更高的速度。并且,从今年8月7日开始发行PHP...
  • cjsyr_cjsyr
  • cjsyr_cjsyr
  • 2016年12月09日 16:32
  • 4323

php5.5+apache2.4安装 环境搭建

在进行php开发之前需要搭建php和apache结合的开发环境。 具体步骤如下:一、下载安装包1.1、php5.5.6下载链接 http://windows.php.net/download/#ph...
  • hua245942641
  • hua245942641
  • 2016年02月24日 18:15
  • 3980

php5文件上传

1、  全局变量$_FILES[‘xxx’];     PHP5新创了一个$_$_FILES全局变量来接收文件的上传。这和以往版本有些差别。在旧版本里,你可以打开register_globals=o...
  • yimao110
  • yimao110
  • 2013年01月16日 15:01
  • 181

记:nginx服务器 php5.5.7升级php7过程和问题解决

①、服务器nginx 、php 、mysql都是安装好的,于是想直接升级php7. ②按照文章:https://typecodes.com/web/centos7compilephp7.html?ut...
  • qq_36427770
  • qq_36427770
  • 2017年04月12日 11:45
  • 2347

wdcp常见组件安装方法,memcache,mysql_innodb,升级php5.3等

wdcp常见组件安装方法,memcache,mysql_innodb,升级php5.3等 安装以下脚本时,请注意服务器内是否有安装云锁,安装前请先卸载(教程) 通过ssh方式登陆服务器...
  • qq_14913213
  • qq_14913213
  • 2017年04月14日 09:09
  • 383

php5全版本绕过open_basedir读文件脚本 -- phith0n

漏洞很久之前(大概5年前)被提出来了,但并不是php代码上的问题,所以问题一直存在,直到现在。我一直没留意,后来yaseng告诉我的,他测试了好像5.5都可以。 他在评论里发过了:http://zo...
  • god_7z1
  • god_7z1
  • 2014年12月11日 19:08
  • 691

mac环境中使用brew安装php5.5.15

MAC本来就自带了 php,但是很多扩展没有安装,所以选择了重新安装php并升级到最新版,下面说说安装步骤,希望对大家有所帮助 Brew 是 Mac 下面的包管理工具,通过 Github 托...
  • lwljava
  • lwljava
  • 2015年01月17日 12:29
  • 1362

PHP5 Session 使用详解(一)

http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无 状态,指的是不会维护http请求数据,http请求是独立的,不持久的。而越来越复杂的WEB应用,需要保存一些用户...
  • abbie
  • abbie
  • 2017年07月14日 14:38
  • 160

CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境 准备篇: 1、配置防火墙,开启80端口、3306端口 vi /etc/sysconfig/iptables...
  • u012885438
  • u012885438
  • 2017年11月09日 10:41
  • 517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP5一直以来的bug!
举报原因:
原因补充:

(最多只允许输入30个字)