php 500

$a=[‘a’=>124,’b’=>’23d’];
var_dump((string)$a);//Array,卡死 500 没有php-error
var_dump(string($a));//php-error

https://icocos.github.io/2018/12/25/PHP%E2%80%94%E2%80%94%E6%9C%8D%E5%8A%A1%E5%99%A8500%E9%94%99%E8%AF%AF%E6%80%BB%E7%BB%93/



500错误,也叫Internal Server Error(内部服务错误),表示服务因未知错误导致无法处理请求。在PHP站点中一般是由PHP返回,也就是说,500错误一般都是PHP脚本的错误。



那么哪类错误会导致500错误呢,PHP所有的错误级别可以在PHP的官方文文档(http://php.net/manual/zh/errorfunc.constants.php)中查询到,而这其中错误级别为E_ERROR、E_PARSE、E_RECOVERABLE_ERROR、E_USER_ERROR以及未捕获的异常等都会导致500错误。



这个是PHP脚本的错误导致的,但是PHP脚本有了错误或异常一定会导致500吗?显然不是,即使在脚本有致命错误的情况下,依旧可以返回200。



display_errors配置选项
在基于python、nodejs等的web应用中,默认情况下,如果出现异常信息会被打印到控制台(STDERR/STDOUT)中。而在基于PHP-FPM架构的PHP中没有控制台可以打印,它的stderr和stdout被置为FastCGI中对应的STRDERR和STDOUT。如果将错误重定向到STDOUT中,错误会直接输出到响应中,并且状态码也会置为200。这个也是display_errors选项所实现的能力。



display_errors选项的配置需要通过ini_set来实现,PHP文档中关于display_errors的配置表明该值为字符串类型,实际使用中数字和布尔类型也可以打开或关闭该配置。



https://cloud.tencent.com/developer/article/1400292



http://php.net/manual/zh/errorfunc.constants.php



500错误出现的最大原因可能是三种,文件权限问题、php 扩展问题或者是在将windows上的’不规范代码上传到Linux上’,当然不要因为页面上面没有任何的信息而慌张,既然有问题出现必然就有问题的解决方案(悄悄的告诉你解决方案在文章末尾哦)。



首先我们得理智的分析问题再来想怎么解决问题。



①文件权限问题:



举个栗子,这里在文件上传非常容易出现这种问题,你会说我在windows上的wamp环境下写的代码可以上传成功,但是我把php程序上传到我的云服务器上(Linux)怎么就不行了?怎么就报个500错误,也没有错误信息呢。这里有个权限问题极其容易被忽视,那就是用户在上传的时候 你服务器上的上传的那个文件夹是不是应该给用户(Others)写权限呢。



②php 扩展问题:



这里出现这种情况,通常是我们在使用第三方提供的SDK,函数库时,或是我们在做数据库操作时,可能会中招,原因就出现在第三方SDK中有使用到你的服务器上没有安装的php扩展或是没有打开的扩展对于这种情况我们需要去查看phpinfo页面,在这个页面上搜索你需要用到的扩展名就知道你的php当中是否安装了你需要使用到的扩展。



<?php
phpinfo();
?>



③将windows上的’不规范代码上传到Linux上’:
Linux上是严格区分大小写的、Linux上引入文件是使用正斜杠的(/)而windows上好像正反都可以、所以在windows上做php开发的时候还是得多留点心,尽量保持Linux上的开发习惯,实在觉得憋不过来,就选择直接连接到Linux服务器上进行开发吧。



当然出现500的原因肯定不止这几点,还得我们通过错误信息来具体情况具体分析,这里给出一个不用去修改php.ini的方法查看500错误信息



在我们出现500错误的php文件前面加上两行代码:



ini_set(“display_errors”,”On”);
error_reporting(E_ALL);



这样他就会像IDE工具一样告诉你到底是哪一个文件下的哪一行代码出了问题,导致服务器内部错误,这样我们就能很容易的找出500错误的根本原因呐。


Category php