最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 记一次PHP测试环境调试

    正文概述 转载于:掘金(belingud)   2020-12-15   330

    记一次php测试环境调试

    一个简单的调试场景,在服务器测试一个脚本,composer管理,slim框架,Medoo作为ORM,脚本使用到了server中封装的方法,测试中脚本中断,在脚本中添加了print_r来查看运行状态,于是在server的代码中也添加了print_r,试图更精准的定位问题,没想到server挂了,准确说涉及到这个调用的接口都挂了。

    知道挂了的时候忽然感觉可能会是添加了print_r的原因,果不其然。

    那么为什么加了print_r打印会影响server的程序执行呢?

    原因

    首先明白缓冲区的作用,缓冲解决的是高速cpu与低速I/O设备不匹配的问题。

    PHP对缓冲的操作时基于一系列的ob函数,ob是 output_buffering的简写。PHP中的echoprint_r函数显示到浏览器上的流程是:

    如果PHP server部署是使用了Apache和PHP,那么PHP要输出数据的时候,会经理两个缓冲区,显示PHP自身的换冲突,然后是Apache的缓冲区

    缓冲区的数据什么时候输出呢?1,当缓冲区满了的时候,缓冲是有容量大小的,到达极限则会自动输出内容。2,脚本执行完毕。

    print_r打印的过程,是一个打开缓冲区,写入,然后输出缓冲区的过程,而在PHP的web server中,响应内容是通过缓冲区来构建的,显式或隐式的使用ob_start来打开缓冲区,而使用print_r会影响web server对缓冲区的操作,导致返回异常或者没有返回。

    深究

    print_r并不一定会操作缓冲区,与输出缓冲区有关的配置 在php.ini中,有两个

    1. output_buffering 该配置直接影响的是php本身的缓冲区,有3种配置参数.on/off/xK(x为某个整型数值);

      • on - 开启缓冲区
      • off - 关闭缓冲区
      • 256k - 开启缓冲区,而且当缓冲区的内容超过256k的时候,自动刷新缓冲区(把数据发送到apache);
    2. implicit_flush

      该配置直接影响apache的缓冲区,有2种配置参数. on/off

      • on - 自动刷新apache缓冲区,也就是,当php发送数据到apache的缓冲区的时候,不需要等待其他指令,直接就把输出返回到浏览器
      • off - 不自动刷新apache缓冲区,接受到数据后,等待刷新指令

    其他的ob函数可以通过PHP文档来查看。

    www.php.net/manual-look…


    起源地下载网 » 记一次PHP测试环境调试

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元