专栏首页喵了个咪的博客空间[喵咪PHP]页面显示空白问题

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PhalGo-Echo路由

    PhalGo-Echo路由 ? Echo官网地址:https://labstack.com/echo Echo是PhalGo最核心的组件,负责了整体的请求路由返...

    喵了个咪233
  • zephir-(1)开篇介绍

    #zephir-开篇介绍# ? ##前言## 先在这里感谢各位zephir开源技术提供者 笔者在学习phalcon的过程中了解到,phalcon2.x版本通过了...

    喵了个咪233
  • [PhalApi实战篇(1)]Redis队列处理异步任务

    [PhalApi实战篇(1)]Redis队列处理异步任务 ? 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. ...

    喵了个咪233
  • 微信指数出炉:世界上最好的编程语言居然不是PHP?

    美女:你能让这个论坛的人都吵起来,我今晚就跟你走。 程序员:PHP是最好的语言! 某论坛真的就炸锅了,各种吵架··· 美女:服了你了,我们走吧,你想干啥都行。...

    用户1335017
  • 让我们一起认识PHP!

    Hi,大家好我是你们熟悉的Script.M很久没发文章了包括之前一直在转载别人的文章今天小编突然良心发现还是写一篇关于自己的文章吧!但是吧Script.M就精通...

    周俊辉
  • 手写 avl tree

    avl tree 又称 平衡二叉树。主要在排序二叉树的基础上进行的一个优化。避免排序二叉树不平衡,从而严重影响查询效率

    shengjk1
  • Spring Boot 2.x(十四):整合Redis,看这一篇就够了

    Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 ...

    山禾说
  • Python实现Wordcloud生成词云图的示例

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概。

    砸漏
  • 什么是字符集?

    无论是数据库,还是应用服务器,有时会碰见字符集的问题,就有些懵圈。看见CSDN转载了程序员乔戈里的一篇文章,用漫画的形式,讲解了各种字符集的知识,通俗易懂。

    bisal
  • Android 调用系统相机 返回图片模糊的解决办法

    剑行者

扫码关注云+社区

领取腾讯云代金券