将所有php错误和警告存储在全局数组中

时间:2019-03-26 09:53:29

标签: php

摘要

我有在不同学院中使用的学校管理系统。如果有人在任何页面上看到错误,然后单击“报告”按钮,然后所有错误存储在表中,我可以在其中看到对研究所造成何种错误 我想将所有的php错误警告等存储在变量中,但显示为空。

如果变量存储了错误和警告,它将显示如下。 enter image description here

问题

全局数组中没有错误存储。

代码

ini_get(0);
set_error_handler("errorHandler");
register_shutdown_function("shutdownHandler");

function errorHandler($error_level, $error_message, $error_file, 
$error_line, $error_context)
{

  $error = " Msg:" . $error_message . " file:" . $error_file . " ln:" . 
  $error_line;

  switch ($error_level) {
  case E_ERROR:
  case E_CORE_ERROR:
  case E_COMPILE_ERROR:
  case E_PARSE:
    mylog($error, "fatal");
    break;
  case E_USER_ERROR:
  case E_RECOVERABLE_ERROR:
    mylog($error, "error");
    break;
  case E_WARNING:
  case E_CORE_WARNING:
  case E_COMPILE_WARNING:
  case E_USER_WARNING:
    mylog($error, "warn");
    break;
  case E_NOTICE:
  case E_USER_NOTICE:
    mylog($error, "info");
    break;
  case E_STRICT:
    mylog($error, "debug");
    break;
   default:
    mylog($error, "warn");

  }
}

全局阵列

$ custom_error显示为空。

global $custom_error;
$custom_error =  array();

function mylog($error, $errlvl)
{
  // error_log($error);  
  // echo '<p><b>'.$error.'<b></p>';
  $custom_error  = $error
}
print_r($custom_error); //Show empty
if($custom_error){
  echo '<button> Report </button>';
 }

1 个答案:

答案 0 :(得分:0)

首先,尝试在您的代码中not use globals,这是一种不好的做法。要回答您的问题:使用您提供的代码填充数组并从函数外部访问它,您应该在函数内部将数组$custom_error声明为global。这样,位于全局范围内的代码就可以访问该数组。

<?php
function mylog($error, $errlvl)
{
    global $custom_error;
    $custom_error[]  = [$error, $errlvl];
}
mylog('error1', 1);
mylog('error2', 2);

echo '<pre>';
var_dump($custom_error);
echo '</pre>';

输出:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(6) "error1"
    [1]=>
    int(1)
  }
  [1]=>
  array(2) {
    [0]=>
    string(6) "error2"
    [1]=>
    int(2)
  }
}