[喵咪PHP]页面显示空白问题

时间:2022-04-29
本文章向大家介绍[喵咪PHP]页面显示空白问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

#[喵咪PHP]页面显示空白问题#

##前言##

哈喽!大家好啊,喵咪PHP第一次和大家见面了,熟悉的朋友呢也之道喵咪我也开了喵咪Liunx和喵咪Golang这两个坑目的呢是吧平常遇到的一些问题或者是在学习中的东西好工具分享出来和大家交流沟通,今天要讲的问题是大家在PHP开发中常常会遇到的页面一片惨白啥内容都没有的问题,喵咪最近也是被一个很奇葩的问题给坑了一下,那么话不多说那就来和喵咪一起看看为什么PHP会返回空白页面呢?

附上:

喵了个咪的博客:w-blog.cn

PhalApi官网地址:http://www.phalapi.net/

开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

##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 欢迎大家的加入!