获取PHP警告错误信息的解决方法

  代码如下所示:

  

复制代码 代码如下:

  <?php

  /**

  * 更新非法字符、發送錯誤信息

  *

  * @author

  * @copyright 2009-06-10

  */

  error_reporting(E_ERROR | E_WARNING | E_PARSE);

  set_error_handler('displayErrorHandler');//自定義錯誤

  //調試信息

  echo "time:".date("Y-m-d H:i:s")."\n";

  //數據配置

  //公共函數

  function displayErrorHandler($error, $error_string, $filename, $line, $symbols)

  {

  $error_no_arr = array(1=>'ERROR', 2=>'WARNING', 4=>'PARSE', 8=>'NOTICE', 16=>'CORE_ERROR', 32=>'CORE_WARNING', 64=>'COMPILE_ERROR', 128=>'COMPILE_WARNING', 256=>'USER_ERROR', 512=>'USER_WARNING', 1024=>'USER_NOTICE', 2047=>'ALL', 2048=>'STRICT');

  $msg = sprintf("%s: %s at file %s(%s)", $error_no_arr[$error] ,$error_string, $filename, $line);

  if(in_array($error,array(1,2,4))){

  echo $msg; echo "\n";//調試顯示

  //發送信息

  if($error==1||$error==2) {

  sendBankMsg($error_string); //發送簡訊

  if(strpos($error_string, 'xml_parse(): Bytes:')!==FALSE){

  writeFiltefile($error_string);

  }

  }

  }

  }

  function hex2bin($hexdata) {

  $bindata = '';

  for($i=0; $i < strlen($hexdata); $i += 2) {

  $bindata .= chr(hexdec(substr($hexdata, $i, 2)));

  }

  return $bindata;

  }

  function writeFiltefile($error_string)

  {

  if(strpos($error_string, 'xml_parse(): Bytes:')===FALSE||strpos($error_string, ' 0x')===FALSE){

  return;

  }

  //寫入文件

  $filename = 'filtetext.php';

  include($filename);

  $error_string = str_replace('xml_parse(): Bytes:', '', $error_string);

  $error_string = str_replace(' 0x','', $error_string);

  $error_text = hex2bin($error_string);

  $filtetextArr[] = $error_text;

  $tempArr = array_unique($filtetextArr);//去除重復

  $result = implode("','",$tempArr);

  $result = "<?php\n\$filtetextArr = array('".$result."');\n?>";

  fileWrite($filename, $result, 'w');

  }

  function sendBankMsg($msg)

  {

  $timestamp = time();

  $params = "msg=".$msg

  ."&posttime=".$timestamp;

  $length = strlen($params);

  //创建socket连接

  $domain = "www.admin.com"; //socket域名

  $actionPath = "/action/bank/bankmsg.php"; //文件路徑

  $fp = fsockopen($domain,80);

  //构造post请求的头

  if($fp){

  $header = "POST ".$actionPath." HTTP/1.1\r\n";

  $header .= "Host:".$domain."\r\n";

  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";

  $header .= "Content-Length: ".$length."\r\n";

  $header .= "Connection: Close\r\n\r\n";

  //添加post的字符串

  $header .= $params."\r\n";

  //发送post的数据

  fputs($fp,$header);

  while (!feof($fp)) {

  $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据

  if ($inheader && ($line == "\n" || $line == "\r\n")) {

  echo $line;

  }

  }

  fclose($fp);

  }

  }

  function fileWrite($fFileName, $fContent, $fTag = 'w') {

  ignore_user_abort (TRUE);

  $fp = fopen($fFileName, $fTag);

  if (flock($fp, LOCK_EX)) {

  fwrite($fp, $fContent);

  flock($fp, LOCK_UN);

  }

  fclose($fp);

  ignore_user_abort (FALSE);

  return;

  }

  ?>