Php 寄存器关闭功能,错误为500

Php 寄存器关闭功能,错误为500,php,error-handling,Php,Error Handling,我正在尝试从dropbox下载一些大视频,然后再上传到另一台服务器。这对小文件非常有效。然而,当文件越来越大,我不断得到500个错误。我试图通过register_shutdown_函数捕捉它们(有关更多详细信息,请参阅),但显然处理程序从未被调用(我没有收到任何电子邮件)。我有什么地方做错了吗 // error handler function fatal_handler() { $error = error_get_last(); if( $error !== NULL) {

我正在尝试从dropbox下载一些大视频,然后再上传到另一台服务器。这对小文件非常有效。然而,当文件越来越大,我不断得到500个错误。我试图通过register_shutdown_函数捕捉它们(有关更多详细信息,请参阅),但显然处理程序从未被调用(我没有收到任何电子邮件)。我有什么地方做错了吗

// error handler
function fatal_handler() {
    $error = error_get_last();
    if( $error !== NULL) {
        $errno   = $error["type"];
        $errfile = $error["file"];
        $errline = $error["line"];
        $errstr  = $error["message"];
        error_mail(format_error( $errno, $errstr, $errfile, $errline));
    }
}

function format_error( $errno, $errstr, $errfile, $errline ) {
    $trace = print_r( debug_backtrace( false ), true );
    // some beautiful error output with content being the container
    return $content;
}

function error_mail($msg) {
    mail("email@example.org", "Error", $msg);
}

register_shutdown_function('fatal_handler');
error_reporting(E_ALL);

不,错误500意味着PHP运行时被终止,并且关闭处理程序也从未被调用。在webservers/vhost/fcgi
error.log
中详细研究实际原因。听起来您正在将下载内容塞进内存,这可能会触发主机正在运行的另一个进程来管理内存。如果PHP进程在外部被终止,执行将立即停止,并且永远不会调用处理程序。检查您的日志,将日志发送到
/var/log/messages
。这些传输需要多长时间,PHP是否作为CGI(PHP fpm,fastcgi)运行?您可能遇到web服务器和PHP之间的超时(通常设置为5分钟)。当PHP在超时时间内没有响应时,Web服务器将终止请求,这将导致500错误。@Sammitch:这是一个非常好的提示。php中是否有内存消耗函数列表?我能检查我当前使用的内存量吗?