php504错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php504错误相关的知识,希望对你有一定的参考价值。

参考技术A 解决方式:

一般默认的fastcgi进程响应的缓冲区是8K,这时可以设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k,这表示设置fastcgi缓冲区为8块128k大小的空间。

当然如果在进行某一项即时的操作, 可能需要nginx的超时参数调大点,例如设置成60秒:send_timeout 60;经过这两个参数的调整,一般不会再提示“504 Gateway Time-out”错误,问题基本解决。

有时候网站需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。而这时候Nginx 504 Gateway Time-out的含义就是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI。

解决方式:

更改php-fpm的几处配置即可:

把max_children由之前的10改为现在的30,这样就可以保证有充足的php-cgi进程可以被使用;

把request_terminate_timeout由之前的0s改为60s,这样php-cgi进程处理脚本的超时时间就是60秒,可以防止进程都被挂起,提高利用效率。

接着再更改nginx的几个配置项,减少FastCGI的请求次数,尽量维持buffers不变:

fastcgi_buffers由 4 64k 改为 2 256k;

fastcgi_buffer_size 由 64k 改为 128K;

fastcgi_busy_buffers_size 由 128K 改为 256K;

fastcgi_temp_file_write_size 由 128K 改为 256K。

重新加载php-fpm和nginx的配置,再次测试,如果没有出现“504 Gateway Time-out”错误,问题便解决了。

解决方式:

将php-fpm的处理方式改成apache模式即可。

PHP最详细PHP从入门到精通——PHP错误处理

 PHP从入门到精通

之PHP中的字符串

  在创建脚本和 web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。

 

本教程介绍了 PHP 中一些最为重要的错误检测方法。

 

  我为大家讲解不同的错误处理方法:

 

  

PHP中的错误处理

1、PHP的错误级别:见表格。
2、调整PHP错误报告级别:
PHP中,调整错误报告级别的方式有两种:
①修改PHP.ini文件的配置项。
a、会导致在当前服务器环境下所有PHP文件都受其影响。
b、如果代码更换服务器,会导致配置文件全部失效,需要重新配置。
所以实际开发过程中,并不推荐使用此方式!!
②在代码中使用ini_set()函数,动态的修改php.ini文件的配置项;(get为获取配置项)

>>>php.ini中的两个重要配置项:
①display_errors:开启或关闭所有错误级别报告;
可选值:1/On表示开启所有错误报告功能; 0/Off表示关闭所有报告;
默认开启,而且强烈建议开启!!

代码实例:

ini_set("display_errors","0");---->关闭错误报告功能;

 

②error_reporting:设置那些错误可以进行报告;
有两个函数可以设置:ini_set()和error_reporting;

代码示例:

ini_set("error_reporting",E_ALL);报告所有级别;
error_reporting("E_ALL & ~E_NOTICE");不报告notice级别,其他均正常报告;

 

3、使用错误日志,记录出现的错误;
①使用日志文件记录:
使用error_log()函数将错误信息输出到日志文件中。默认的日志文件在wamp中的log文件夹下,php_error.log文件;
>>>自定义日志文件打印错误:

代码示例:

ini_set("error_log","E:/text.txt");//设置日志文件地址;
error_log("出错了!!!");//打印一句错误信息;

error_log("这是一个PHP错误",3,"E:/textLog.text");//直接将错误信息打印到指定文件中;

 

②写进Windows系统日志中:

代码示例:

ini_set("error_log", "syslog");//设置日志记录到系统日志;
error_log("系统日志出错");//使用日志报错时,将自动进入系统日志;

 

4、trigger_error:自定义一个错误;会像系统错误一样。产生报错。
参数①:错误的信息内容;
参数②:错误的级别。常选E_USER_NOTICE E_USER_WARRING E_USER_ERRORS;

5、自定义错误处理函数:
①声明一个错误处理函数function func(){}
②使用set_error_handler("func");设置,当文件出现错误时,不再使用系统自带的错误提示功能,而是调用我们自定义的函数。
>>>set_error_handler在除法函数时,会默认想函数发送四个参数:分别是:错误的级别、信息、文件、所在行号;
所以可以在声明函数时,接受错误信息,具体处理。

实例展示:

ini_set("display_errors", 1);
    $errMessage="";
    function errorHandler($type,$message,$file,$line){
        global $errMessage;
        switch ($type) {
            case E_NOTICE:
                $errMessage .= "发生了没有什么卵用的小bug,就不用处理了<br><br>";
                break;
            case E_WARNING:
                $errMessage .= "出错啦!!!";
                $errMessage .= "错误类型是:{$type}";
                $errMessage .= "错误信息是:{$message}";
                $errMessage .= "错误发生的文件是:{$file}";
                $errMessage .= "错误发生的行号是:{$line}";
                $errMessage .= "<br><br>";
                break;
            case E_ERROR:
                echo "<script>"; 
                echo "location.href=\'../01text.php\'"; 
                echo "</script>"; 
                break;
            default:
                echo "<script>"; 
                echo "location.href=\'../01text.php\'"; 
                echo "</script>"; 
                break;
        }
        
    }
    set_error_handler("errorHandler");

    //ini_set("error_reporting",E_ALL);
    //error_reporting(E_ALL & ~E_NOTICE);
    ini_set("error_log", "syslog");
    error_log("这是一个PHP错误",3,"E:/textLog.text");
echo $num;
//trigger_error("22222222",E_USER_NOTICE);//自定义一个错误,上述函数未接受,因此会进入default;
echo "11111";
echo "</br>-------------------------------------------------</br>";
echo $errMessage;

 

本期分享就到这里,下期再见。觉得内容对你有所帮助的朋友请点推荐,欢迎大家在评论下方评论区与博主互动,谢谢大家!

未完,待续。。。

 更多精彩内容,敬请关注 Q的前端世界的技术博客。

 

 

以上是关于php504错误的主要内容,如果未能解决你的问题,请参考以下文章

个人504错误排查

Nginx出现502和504错误解决方法

http的500,502,504错误

PHP 脚本自动监控 Nginx 504错误

如何解决nginx 504 Gateway Time-out错误

Nginx提示502和504错误的终极解决方案