服务器端代码 ( PHP ) 有错误,我知道该文件,但调试起来非常困难,因为没有任何错误消息。我看到的只是响应头返回:连接:关闭。没有日志或任何东西
有什么工具可以用来在服务器端检测或调试它吗?查看哪里发生错误或脚本中断?
服务器端代码 ( PHP ) 有错误,我知道该文件,但调试起来非常困难,因为没有任何错误消息。我看到的只是响应头返回:连接:关闭。没有日志或任何东西
有什么工具可以用来在服务器端检测或调试它吗?查看哪里发生错误或脚本中断?
您可以在您认为脚本可能失败的关键区域之前手动放入一些echo语句。尝试把error_reporting(E_ALL); 也在你的脚本顶部。
我在一个包含文件中有下面的代码(稍微修改了这个以删除自定义代码)。您可以使用它将错误消息记录到数据库中。它使用一个类来处理数据库交互,但您可以将其更改为您自己的实现。或将其记录到文件中。
它还将信息输出到浏览器,但您也可以在生产环境中丢弃它。
<?php
set_error_handler("ErrorHandler");
register_shutdown_function('ShutdownHandler');
function ShutdownHandler() {
$error = error_get_last();
if($error !== NULL){
switch ($error['type']) {
case E_WARNING:exit;
}
$context = get_defined_vars();
ErrorHandler($error['type'],'(SHUTDOWN) ' . $error['message'], $error['file'],$error['line'],$context);
}
}
function ErrorHandler($error_level,$error_message, $error_file,$error_line,$error_context)
{
$msg = "";
$type = FriendlyErrorType($error_level);
switch ($error_level) {
case E_USER_ERROR:
$msg .= "<div style='border:1px solid #F00;padding:10px;margin:10px;'>";
$msg .= "<h1>Error</h1>";
$msg .= "<p><b>[".$error_level."]</b>: ". $error_message . "</p>";
$msg .= "<p><b>File</b>: ". $error_file . "<br/>";
$msg .= "<b>Line</b>: ". $error_line . "</p></div>";
case E_USER_WARNING:
$msg .= "<p>Warning -> <b>[".$error_level."]</b>".$error_file." on line ". $error_line .": ". $error_message . "</p>";
break;
case E_USER_NOTICE:
$msg .= "<p>Notice -> <b>[".$error_level."]</b>".$error_file." on line ". $error_line .": ". $error_message . "</p>";
break;
default:
$msg .= "<p>".$type." -> <b>[".$error_level."]</b>".$error_file." on line ". $error_line .": ". $error_message . "</p>";
break;
}
$context = print_r($error_context, true);
$sVars = print_r($_SERVER, true);
$pVars = print_r($_POST, true);
$qVars = print_r($_GET, true);
//add to database
//custom class to add info to a database. You need to alter this to your own INSERT method.
//ct2database::query("INSERT INTO ct2_errors (`DateCreated`,`Type`,`Level`,`Message`,`Line`,`File`,`Context`,`ServerVars`,`PostVars`,`QueryVars`) VALUES ('$1','$2','$3','$4','$5','$6','$7','$8','$9','$10')", MysqlDate(), $type, $error_level,$error_message,$error_line,$error_file,$context, $sVars, $pVars, $qVars);
if ($error_level == E_USER_ERROR)
exit;
}
function FriendlyErrorType($type)
{
switch($type)
{
case E_ERROR: // 1 //
return 'E_ERROR';
case E_WARNING: // 2 //
return 'E_WARNING';
case E_PARSE: // 4 //
return 'E_PARSE';
case E_NOTICE: // 8 //
return 'E_NOTICE';
case E_CORE_ERROR: // 16 //
return 'E_CORE_ERROR';
case E_CORE_WARNING: // 32 //
return 'E_CORE_WARNING';
case E_CORE_ERROR: // 64 //
return 'E_COMPILE_ERROR';
case E_CORE_WARNING: // 128 //
return 'E_COMPILE_WARNING';
case E_USER_ERROR: // 256 //
return 'E_USER_ERROR';
case E_USER_WARNING: // 512 //
return 'E_USER_WARNING';
case E_USER_NOTICE: // 1024 //
return 'E_USER_NOTICE';
case E_STRICT: // 2048 //
return 'E_STRICT';
case E_RECOVERABLE_ERROR: // 4096 //
return 'E_RECOVERABLE_ERROR';
case E_DEPRECATED: // 8192 //
return 'E_DEPRECATED';
case E_USER_DEPRECATED: // 16384 //
return 'E_USER_DEPRECATED';
}
return "";
}
?>