#[喵咪PHP]页面显示空白问题#php
##前言##nginx
哈喽!你们好啊,喵咪PHP第一次和你们见面了,熟悉的朋友呢也之道喵咪我也开了喵咪Liunx和喵咪Golang这两个坑目的呢是吧日常遇到的一些问题或者是在学习中的东西好工具分享出来和你们交流沟通,今天要讲的问题是你们在PHP开发中经常会遇到的页面一片惨白啥内容都没有的问题,喵咪最近也是被一个很奇葩的问题给坑了一下,那么话很少说那就来和喵咪一块儿看看为何PHP会返回空白页面呢?git
附上:api
喵了个咪的博客:w-blog.cn服务器
##1. 了解PHP报错机制##测试
其实在日常PhalApi回答各位小伙伴问题的时候经常会有童鞋截了图问我,怎么调用接口没有反应呢?网站
这类问题每每你们对与PHP的报错机制不是太了解致使了使用默认配置在运行出错了程序结束了并无把报错信息打印出来可是程序也没办法执行下去,其中两个相当重要的两个配置在php.ini中,咱们通常用以下配置,把全部报错类型都打印出来:编码
#错误等级,不一样的配置会打印不一样的错误和警告
error_reporting = E_ALL
//是否开启报错
display_errors = ON
咱们来看一下error_reporting能够设置的参数种类:
E_ALL – 全部的错误和警告(不包括 E_STRICT)
E_ERROR – 致命性的运行时错误
E_WARNING – 运行时警告(非致命性错误)
E_PARSE – 编译时解析错误
通常以上就是咱们常常用到的
提示:建议开发测试环境使用E_ALL排除全部的错误和警告养成良好的编码习惯,在生产环境时关闭display_errors避免没必要要的请求失败
##2. Nginx这个锅你说你接不接##
第二个问题就比较有意思了,咱们来一同了解一下事情的通过
###2.1 事情是这样的
在工做中作Excel导出功能,发现了一个问题我导出的内容只有69条多了就没有了(本来8000多条记录),而后直接请求接口以后返回值是一片空白,经过调试发现200条一下均可以成功导出多了不行.找了nginx报错日志,php日志都没有问题
###2.2 问题剖析
是否是很玄学,200条能够多了不行,没有任何error记录,更奇怪的是我有一个环境是能够成功导出的,奇怪吧?
先后怀疑过是否是php运行内存是否是给少了,查了一下我给了192MB确定是够的,是否是nginx缓冲区给少了,查了下也没有问题,是否是我使用的excel导出的姿式有问题呢?换了两个类库也没问题,那究竟是为何呢
**排除法:**这个事件中有两个角色是最大的怀疑对象,Nginx,PHP,咱们先使用PHP经过cli的方式请求接口,发现该打印的都ok,那么全部的矛头都指向了Nginx了,可是Nginx也没有错误日志啊,费劲千辛万苦也没有找到缘由只能处处求助,最后是一个同事的一句话惊醒了梦中人,会不会是权限问题,我会想起了一件事情Nginx是www权限开始配好了,后面进行发布工具部署的时候建立了一个发布工具的用户,而后把全部WEB运行的用户权限都指向了这个用户,检查了一下果然仍是www用户,因此是没有权限的问题
###2.3 什么原理
到底是什么原理致使的这个问题,经过分析考证,PHP在打印的时候是实时输出也就是echo一句就是打印一句,可是Nginx或者说WEB程序并非这样的,他们都是把全部的返回结果一并返回,Nginx有一个buff缓冲区大小是64K,当你的页面返回的文本大小大于64k的时候就会把须要输出的内容记录到本地而后在执行结束了一并输出,可是正好这个时候应为更换了Nginx的运行用户为发布用户,这个时候失去了权限致使写不成功就失败了,而后想要记录ERROR日志的时候发现error目录也没有权限也就没有写入error日志
###2.4 请接好个人锅
会想起一件事情我意识到这个问题的严重性,有一次领导说咱们的网站怎么打不开了好多客户在反应,而后我去查了下服务器发现Nginx居然死了,找了很久的error日志也没有,最后加了一个监控不了了之,原来都是没有权限记录error日志的锅
为何Nginx不检查权限呢?你就说吧这个锅你接不接
##3. 总结##
出现了两个问题一个是导出Excel的时候出现了截断的问题,另一个是Nginx死了无证可查的问题,这都是应为没有给Nginx赋予权限的问题,分享出来给你们做为参考,也但愿你们不要犯和喵咪同样的这种错误.
最后声明一下Nginx是一个很好的软件问题都是喵咪不细心的问题,只是但愿写的幽默一点把锅甩给了Nginx
注:笔者能力有限有说的不对的地方但愿你们可以指出,也但愿多多交流!
PhalApi官网QQ交流群:421032344 欢迎你们的加入!