技术饭

nginx下运行php的程序时返回200访问却是空白页问题的解决方法

copylian    0 评论    27922 浏览    2018.03.05

这几天一直在研究小程序,开发的差不多的时候吧环境从php5切换到了php7之后发现了很多的问题,比如传入参数没有默认值等造成的问题,但另一个棘手的问题就是:nginx下运行php的程序时返回200访问却是空白页,接口请求成功但是却一直无法返回数据,经过不断反复测试,代码断点测试,最后才发现了问题所在。

起初搜索:php7 返回200空白

搜索到的解决方案:

ngxin中安装php-fpm后,html静态页面没问题,不过,虽然phpinfo页面返回200状态码,但浏览却总是空白页,也没有任何报错。

考虑应该是nginx已经将php页面转移给php处理了,所以问题应该在php的配置上,经过查找,发现需要在nginx中加入一句话:

fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

安装完nginx后,默认的fastcgi_params配置文件中没有上面这句。

在nginx.conf中的 

复制代码 代码如下:

location ~ .php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;  #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  include        fastcgi_params;
       }

或在fastcgi_params配置文件中加入:

复制代码 代码如下:

# PHP only, required if PHP was built with --enable-force-cgi-redirectfastcgi_param  REDIRECT_STATUS    200;

fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

重启nginx,即可正常显示页面了。

重点是上面的方案并不能解决现在所遇到的问题,有点懵逼了......

最终解决方案:代码断点调试,原来问题出在了json_encode()的解析时数据返回的NAN数据无法解析,才返回了空白,NAN的数据原因是因为除法除数为0的缘故

php json_encode输出为空问题,这种情况一般是json_encode序列化数组时出现错误,错误原因有很多,可以通过json_last_error函数来查看错误原因!!!

可能的原因

-----------------------------------------------------------

1、反斜杠,可以用stripslashes() 函数删除由 addslashes() 函数添加的反斜杠,可能还要用到urlencode ()— 编码 URL 字符串

-----------------------------------------------------------

json_last_error函数手册地址(http://www.php.net/manual/zh/function.json-last-error.php)

-----------------------------------------------------------

(PHP 5 >= 5.3.0, PHP 7)

json_last_error — 返回最后发生的错误

说明

-----------------------------------------------------------

int json_last_error ( void ) 如果有,返回 JSON 编码解码时最后发生的错误。

参数

-----------------------------------------------------------

此函数没有参数。

返回值

-----------------------------------------------------------

返回一个整型(integer),这个值会是以下的常量之一:

JSON_ERROR_NONE    没有错误发生    

JSON_ERROR_DEPTH    到达了最大堆栈深度    

JSON_ERROR_STATE_MISMATCH    无效或异常的 JSON    

JSON_ERROR_CTRL_CHAR    控制字符错误,可能是编码不对    

JSON_ERROR_SYNTAX    语法错误    

JSON_ERROR_UTF8    异常的 UTF-8 字符,也许是因为不正确的编码。    PHP 5.3.3    

JSON_ERROR_RECURSION    One or more recursive references in the value to be encoded    PHP 5.5.0    

JSON_ERROR_INF_OR_NAN    One or more NAN or INF values in the value to be encoded    PHP 5.5.0    

JSON_ERROR_UNSUPPORTED_TYPE    指定的类型,值无法编码。    PHP 5.5.0    

JSON_ERROR_INVALID_PROPERTY_NAME    指定的属性名无法编码。    PHP 7.0.0    

JSON_ERROR_UTF16    畸形的 UTF-16 字符,可能因为字符编码不正确。    PHP 7.0.0  

-----------------------------------------------------------

echo json_encode(array('error' => '0', 'message' => '没有错误'));

var_dump(json_last_error());

//这里也可以是json_decode

//错误码对照

0 JSON_ERROR_NONE

1 JSON_ERROR_DEPTH

2 JSON_ERROR_STATE_MISMATCH

3 JSON_ERROR_CTRL_CHAR

4 JSON_ERROR_SYNTAX

5 JSON_ERROR_UTF8

6 JSON_ERROR_RECURSION

7 JSON_ERROR_INF_OR_NAN

8 JSON_ERROR_UNSUPPORTED_TYPE

-----------------------------------------------------------

执行json_last_error()函数,最终返回的结果是7,也就是 JSON_ERROR_INF_OR_NAN ,这才解决json_encode()解析空白的问题!!!

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢