찾다

常见错误处理类型

  • 语法错误

  • 环境错误

  • 逻辑错误

常见错误级别

  • Deprecated 最低级别的错误

    • 不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行

  • Notice 通知级别的错误

    • 使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行

  • Waning 警告级别的错误

    • 程序出问题了,需要修改代码!!!程序继续执行

  • Fatal Error 错误级别的错误

    • 程序直接报错,需要修改代码!!!中断程序执行

  • parse error 语法解析错误

    • 语法检查阶段报错,需要修改代码!!!中断程序执行

  • E_USER_相关的错误

    • 用户定义的错误,用户手动抛出错误,进行自定义错误处理

PHP配置文件和错误相关选项

设置错误级别
1、通过修改php.ini文件设置错误级别,静态设置,需要重启apache
// error_reporting = E_ALL&~E_NOTICE; //显示所有错误,除了E_NOTICE级别
// display_errors = 1; //线下开启,先上关闭

2、通过error_reporting()函数设置,动态设置
// error_reporting(E_ALL&~E_NOTICE); //显示所有错误,除了E_NOTICE级别
// error_reporting(0); //屏蔽所有错误,只会显示语法解析错误
// erorr_reporting(-1); //显示所有错误

3、通过ini_set()函数进行运行时设置,动态设置
// ini_set('error_reporting',0);
// ini_set('error_reporting',-1);
// ini_set('display_errors',0);

使用triggerr_error进行错误抛出

<?phpheader('content-type:text/html;charset=utf-8');$num1=1;$num2='xxx';if ( (!is_numeric($num1) || !is_numeric($num2)) ) {    //通知级别,代码继续执行    //echo trigger_error('数值必须为整型!',E_USER_NOTICE);         //警告级别,代码继续执行    //echo trigger_error('数值必须为整型!',E_USER_WARNING);         //错误级别,代码中断    echo trigger_error('数值必须为整型!',E_USER_ERROR); }else{    echo $num1+$num2;}echo '<br />代码继续执行';

记录错误

配置php.ini脚本设置记录错误
log_errors = On //是否将产生错误信息记录到日志或者error_log中
;error_log = syslog //设置脚本错误将记录到系统日志中
log_errors_max_len = 1024 //设置错误报错最大值,单位字节
ignore_repeated_errors = Off //是否忽略重复的错误信息
ignore_repeated_source = Off //是否忽略重复错误消息的来源
track_errors = On //如果开启,最后一个错误将永远保存在$php_errormsg中

将错误记录到指定的文件中

<?php//运行时设置错误处理ini_set('display_errors','off');ini_set('error_log','D:\logs\error.log');//设置错误输出error_reporting(-1);echo $test; //NOTICEecho '<hr />';settype($var,'king'); //Warningecho '<hr />';test(); //Fatal error

将日志文件保存到系统日志中

<?phperror_reporting(-1);ini_set('display_errors',0);ini_set('log_errors',1);ini_set('error_log','syslog');//该记录方式,在windows中需要去,计算机管理-》事件查看器-》自定义视图中查找php5.4.0的log日志openlog('PHP5.4.0',LOG_PID,LOG_SYSLOG);syslog(LOG_ERR,'this is syslog !!!daye:'.date('Y/m/d H:i:s'));closelog();

将错误以邮件形式发送
1、首先需要配置邮件服务器!
2、去php.ini中配置邮件参数
3、写代码

error_log('当前系统被人攻击!产生错误!',1,'87399497@qq.com');

error_log函数使用

error_log($msg); //传入错误记录,需要与error_log配置使用

如何使用Set_error_handler()

<?phpheader('content-type:text/html;charset=utf-8');//-1代表显示所有的错误警告error_reporting(-1);/** * 自定义一个错误处理 * @param  [type] $errno  [错误级别] * @param  [type] $errmsg [错误信息] * @param  [type] $file   [错误文件] * @param  [type] $line   [错误行号] * @return [type]         [description] */function customer_error($errno,$errmsg,$file,$line){    echo "<b>错误代码:</b>[{$errno}] {$errmsg} <br/>".PHP_EOL;    echo "<b>错误行号:</b>{$file}文件中的第 {$line} <br/>".PHP_EOL;    echo "<b>PHP版本:</b>".PHP_VERSION."(".PHP_OS.") <br/>".PHP_EOL;    //注意:如果自定义错误处理捕获了,代码还是会执行,如果不想被执行,需要die掉!!!    //die;}//设置自定义错误处理set_error_handler('customer_error');//输出一个未定义变量的警告echo $test;echo '<hr/>';//原生出错//Notice: Undefined variable: test in D:\phpStudy\WWW\example\index.php on line 26//自定义出错//错误代码:[8] Undefined variable: test //错误行号:D:\phpStudy\WWW\example\index.php文件中的第 26 //PHP版本:5.3.29(WINNT) //无法捕获一个致命错误Fatal error,会切换到原生出错//test();//手动抛出一个错误,被自定义的错误处理捕获trigger_error('this is a test of error',E_USER_ERROR);echo 'contiune';echo '<hr/>';//错误代码:[256] this is a test of error //错误行号:D:\phpStudy\WWW\example\index.php文件中的第 43 //PHP版本:5.3.29(WINNT) //contiune//取消自定义错误处理,将会重新适应PHP原生的错误处理restore_error_handler();echo $tt;echo '<hr />';//Notice: Undefined variable: tt in D:\phpStudy\WWW\example\index.php on line 49//重新挂载自定义错误处理//除了NOTICE级别的交给系统处理,剩下的全部使用customer_error自定义的错误处理set_error_handler('customer_error',E_ALL&~E_NOTICE);echo $asc; //E_NOTICE级别,系统的错误处理settype($var,'king'); //E_WARNING级别,使用自定义的错误处理//Notice: Undefined variable: asc in D:\phpStudy\WWW\example\index.php on line 65//错误代码:[2] settype() [function.settype]: Invalid type //错误行号:D:\phpStudy\WWW\example\index.php文件中的第 66 //PHP版本:5.3.29(WINNT) 

自定义一个错误处理器

<?phpclass MyErrorHandler{        public $msg='';    public $filename='';    public $line=0;    public $vars=array();    public function __construct($msg,$filename,$line,$vars){        $this->msg = $msg;        $this->filename = $filename;        $this->line = $line;        $this->vars = $vars;    }    public static function deal($errno,$errmsg,$filename,$line,$vars){                $self = new self($errmsg,$filename,$line,$vars);        switch ($errno) {            case E_USER_ERROR :                return $self->dealError();                break;            case E_USER_WARNING :            case E_WARNING :                return $self->dealWarning();                break;            case E_NOTICE :            case E_USER_NOTICE :                return $self->dealNotice();                break;            default:                return false;                break;        }    }    /**     * 处理致命错误     * @return [type] [description]     */    public function dealError(){        ob_start();        debug_print_backtrace();        $backtrace = ob_get_flush();        $errmsg = <<<EOF出现了致命错误,如下:产生错误的文件:{$this->filename}产生错误的信息:{$this->msg}产生错误的行号:{$this->line}追踪信息:{$backtrace}EOF;        //发送邮件的错误日志        //error_log($errmsg,1,'87399497@qq.com');        //记录到错误日志        error_log($errmsg,3,'D:/logs/customer_error.log');        exit(1);    }    /**     * 处理警告错误     * @return [type] [description]     */    public function dealWarning(){        $errmsg = <<<EOF出现了警告错误,如下:产生警告的文件:{$this->filename}产生警告的信息:{$this->msg}产生警告的行号:{$this->line}EOF;        error_log($errmsg,3,'D:/logs/customer_warning.log');    }    /**     * 处理通知级别的错误     * @return [type] [description]     */    public function dealNotice(){        $date = date('Y-m-d H:i:s',time());        $errmsg = <<<EOF出现了通知错误,如下:产生错误的文件:{$this->filename}产生错误的信息:{$this->msg}产生错误的行号:{$this->line}产生通知的时间:{$date}EOF;        error_log($errmsg,3,'D:/logs/customer_notice.log');    }}//显示所有错误error_reporting(-1);//设置自定义错误,使用传入类和方法的方式set_error_handler(array('MyErrorHandler','deal'));//触发NOTICE级别错误,会保存到log日志中echo $tt;//手动触发一个错误trigger_error('手动抛出一个错误',E_USER_ERROR);

register_shutdown_function()函数

<?php //register_shutdown_function该函数将会在PHP执行关闭时调用//使用场景//1、页面强制停止//2、代码意外终止class Showdown{    public static function endScript(){        if (error_get_last()){            echo '<pre class="brush:php;toolbar:false">';            error_get_last();            echo '
'; //因为register_shutdown_function调用该函数的时候,是代码终止,脱离当前PHP上下文环境了 //所以$filename的路径要写决定路径!!! file_put_contents('D:\logs\register_shutdown_function.log', error_get_last()); die('endScript'); } }}//特别声明!如果有die或exit在注册错误处理之前,那么将不会注册错误处理register_shutdown_function(array('Showdown','endScript'));echo md6();

错误抑制符

@settype($var,'longjq'); //无变量$var,使用@符号进行抑制错误输出

错误级别

http://www.w3school.com.cn/php/php_ref_error.asp

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 지속적인 사용 : 지구력의 이유PHP의 지속적인 사용 : 지구력의 이유Apr 19, 2025 am 12:23 AM

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

PHP 및 Python : 유사점과 차이점을 탐구합니다PHP 및 Python : 유사점과 차이점을 탐구합니다Apr 19, 2025 am 12:21 AM

PHP와 Python은 웹 개발, 데이터 처리 및 자동화 작업에 널리 사용되는 고급 프로그래밍 언어입니다. 1.PHP는 종종 동적 웹 사이트 및 컨텐츠 관리 시스템을 구축하는 데 사용되며 Python은 종종 웹 프레임 워크 및 데이터 과학을 구축하는 데 사용됩니다. 2.PHP는 Echo를 사용하여 콘텐츠를 출력하고 Python은 인쇄를 사용합니다. 3. 객체 지향 프로그래밍을 지원하지만 구문과 키워드는 다릅니다. 4. PHP는 약한 유형 변환을 지원하는 반면, 파이썬은 더 엄격합니다. 5. PHP 성능 최적화에는 Opcache 및 비동기 프로그래밍 사용이 포함되며 Python은 Cprofile 및 비동기 프로그래밍을 사용합니다.

PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경