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

前端技术 2023/09/07 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;
}
?>

本文地址:https://www.stayed.cn/item/20079

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。