代码如下所示:
<?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;
}
?>