有没有办法在PHP中编码错误消息

时间:2013-02-09 09:53:18

标签: php error-handling

我注意到,当youtube页面崩溃时,它会发出一种编码信息,可以发送给Youtube的开发人员,而客户无需了解Youtube基础设施和使用的程序。

这个想法是否适用于您自己的网站?

3 个答案:

答案 0 :(得分:2)

PHP不需要它 与Flash不同,PHP在服务器端运行。因此,只需让PHP记录任何错误消息 在php.ini文件中设置这些选项

log_errors = On
display_errors = Off

您将无需志愿者用户查看 但只有您的网络服务器的错误日志才能查看

答案 1 :(得分:2)

现在大多数框架都能够使用不同的应用程序设置进行生产和开发。

在生产模式下(当客户使用网站时)出于安全性和设计原因,不应出现任何错误。因此,您经常打开log_errors,并关闭display_errors。当出现不可恢复的错误时,会向用户显示“出了问题,我们会立即将最好的人员放在上面”。向用户显示一些奇怪的数字是没有意义的,比如“错误代码823”。使用cron worker向您发送错误日志,或者只是手动检查日志,并确保错误消息足够冗长,以便您跟踪错误。

在开发模式下(当您在开发期间在本地运行网站时),您可能希望在出现错误时立即查看错误。因此,您打开display_errors。你可能不介意设计是否破裂,希望你能理解发生了什么。

错误消息是程序员最好的朋友,但您的用户永远不必体验它们。如果发生这种情况,请务必向用户提供一些明智的反馈,而不仅仅是空白页或随机错误代码。

答案 2 :(得分:0)

只是想到创建一个自定义错误处理程序,使用一些基本编码/解码功能,这取决于你扩展这个想法:

// Set error handler
set_error_handler("customError");

// The error function handler
function customError($error, $errorMessage, $errorFile, $errorLine){
   echo(encodeError("<b>Error</b> [$error]: $errorMessage, on line $errorLine in $errorFile ."));
}

function encodeError($string){
  $array = str_split($string,1);
  $results = array();
  foreach ($array as $value) {
    $results[] = ord($value);
  }
  return(base64_encode(implode(".", $results)));
}

function decodeError($string){
  $array = explode(".", base64_decode($string));
  $results = array();
  foreach ($array as $value) {
    $results[] = chr($value);
  }
  return (implode("", $results));
}

 // Trigger error
 echo(3/0);

// We the developers decode it with the decode function
echo('<br><hr>'.decodeError('NjAuOTguNjIuNjkuMTE0LjExNC4xMTEuMTE0LjYwLjQ3Ljk4LjYyLjMyLjkxLjUwLjkzLjU4LjMyLjY4LjEwNS4xMTguMTA1LjExNS4xMDUuMTExLjExMC4zMi45OC4xMjEuMzIuMTIyLjEwMS4xMTQuMTExLjQ0LjMyLjExMS4xMTAuMzIuMTA4LjEwNS4xMTAuMTAxLjMyLjU2LjUzLjMyLjEwNS4xMTAuMzIuNjcuNTguOTIuMTE5Ljk3LjEwOS4xMTIuOTIuMTE5LjExOS4xMTkuOTIuMTAxLjEyMC4xMTIuMTA4LjQ4LjEwNS4xMTYuOTIuMTIyLjEwMS4xMTQuMTExLjQ5LjQ2LjExMi4xMDQuMTEyLjMyLjQ2'));
相关问题