首页 / 网页编程 / PHP / 获取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")."
";
//數據配置
//公共函數
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 "
";//調試顯示
//發送信息
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
$filtetextArr = array("".$result."");
?>";
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
";
$header .= "Host:".$domain."
";
$header .= "Content-Type: application/x-www-form-urlencoded
";
$header .= "Content-Length: ".$length."
";
$header .= "Connection: Close
";
//添加post的字符串
$header .= $params."
";
//发送post的数据
fputs($fp,$header);
while (!feof($fp)) {
$line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据
if ($inheader && ($line == "
" || $line == "
")) {
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;
}
?>