zoukankan      html  css  js  c++  java
  • PHP基础05---文件处理

    错误级别

    详见这里

    错误处理

    ​ 指的是系统(或用户)在对某些代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员

    一、错误分类

    • 语法错误:不符合php语法规范,无法编译更无法执行。(parse error
    • 运行错误:代码执行过程中会出现一些条件不满足导致的错误(runtime error
    • 逻辑错误:虽然能执行,但得不到想要的结果

    二、错误代号

    ​ 错误代号在php中都被定义成了系统常量(可直接使用

    1. 系统错误:

      1. E_PARSE:编译错误,代码不会执行。
      2. E_ERROR:fatal error,致命错误,代码无法执行
      3. E_WARNING:warning,警告错误,不会影响代码执行,但是可能得到意想不到的结果
      4. E_NOTICE:notice,通知错误,不会影响代码执行
    2. 用户错误:E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE.

      用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到

    3. 其他:E_ALL,代表着所有的错误(通常在错误控制的时候比较多),建议在开发过程中(开发环境)使用

    ​ 所有以E开头的错误常量(代号)其实都是由一个字节存储,然后每一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算操作。

    //排除通知级别:
    	notice: E_ALL & ~E_NOTICE
    //只要警告和通知:
    	E_WARNING |E_NOTICE
    

    三、错误触发

    ​ 程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,输出给用户:主要针对代码的语法错误和运行时的错误

    ​ 人为错误:如果某些逻辑可能会出错,从而使用对应的判断代码来触发相应的错误提示

    <?php
        header('Content-type:text/html;charset=utf-8');
        $a = 100;
    	echo $a;
    	$b = 0;
    	if($b == 0){
            //人为触发错误
            trigger_error('除数不能为0!'); //默认notice,会继续执行。
            
            //通过第二个参数严格控制
            trigger_error('除数不能为0!',E_USER_ERROR); //默认error,代码下面不会继续执行。
        }
    	echo 'yyds';
    

    错误显示设置

    ​ 哪些错误该显示,以及如何显示

    两种方式就来设置当前脚本的错误处理

    • 1.php的配置文件:全局配置:php.ini文件

      display_errors:是否显示错误

      error_reporting:显示什么级别的错误

    • 2.可以在运行的php脚本中设置(脚本中定义的配置级别比配置文件高。)(通常在开发当中都会在脚本中设置。

      error_reporting():

      ini_set('error_reporting',E_ALL);

      ini_set('display_errors',1);

    error_reporting(-1)显示所有错误,error_reporting(0)屏蔽所有错误。ini_set('error_reporting',0)也是屏蔽所有错误。可以在php.ini文件中设置error_reporting来使脚本显示或不显示某些错误。ini_set('display_errors','On')显示错误。

      注意:error_reporting()设置报告何种错误,而ini_set('display_errors','On')设置是否在输出错误。因而error_reporting(-1)和ini_set('display_errors',0)可用作设置日志:报告错误并且不输出。

    ​ ----出处

    错误日志设置

    ​ 在实际生产环境中,不会直接让错误直接显示给用户。

    为啥?

    1. 对用户不友好
    2. 不安全:会暴露路径和文件名等信息。

    ​ 这时候,暴露出来的错误需要保存到日志文件中,需要在php配置文件中或者代码中(ini_set)设置对应的error_log配置项

    设置error_log配置项

    1. 开启日志功能:在php.ini中找到log_errors ,确保其 = On

    2. 在php.ini中找到error_log=syslog,在它下面加入路径。比如:error_log = 'E:/server/php8/errorlog/php_errors.log'

    自定义错误处理

    ​ 最简单的错误处理:trigger_errors()函数,但是不会组织系统报错。

    ​ php系统提供了一种用户处理错的的机制,用户自定义错误处理函数,然后将该函数增加操作系统处理的句柄中,然后系统会在碰到系统后使用用户定义的错误函数

    1. 如何将用户自定义的函数放到系统中?set_error_handler();

    2. 自定义错误处理函数,系统有要求(详见上面的链接

      系统后期调用该自定义函数的时候,会给第一个和第二个传递对应的参数。(第一个第二个参数必须存在。

    <?php
        
        /*@param1 $errno ,是系统提供的错误代码:E_ALL、E_NOTICE..*/
        
        function mye($errno,$errstr,$errfile,$errline){
        	//判断当前会碰到的错误有哪些
        	//这一步是排除当前本身系统就要排除的错误
        	if(error_reporting() & $errno)//error_reporting没有参数时,代表获取当前系统错误处理对应的级别,对应errornumber
                return false;
        	//判断错误类型。
        	switch($errno){
                case E_ERROR:
                case E_USER_ERROR:
                    echo 'fatal error in file'.$errfile . ' on line '.errline . '<br/>';
                    echo'error info:' . $errstr;
                    break;
                case E_WARNING;
                case E_USER_WARNING:
                    echo 'Warning in file '. $errfile.' on line '. $errline . '<br/>';
                    echo 'error info:' . $errstr;
                    break;
                case E_NOTICE;
                case E_USER_NOTICE:
                    echo 'Notice in file '. $errfile.' on line '. $errline . '<br/>';
                    echo 'error info:' . $errstr;
                    break;
            }
        return true;
        
    	}
    	//未定义$a,用来报错
    	echo $a;
    
    	//修改错误机制
    	set_error_handler('文件名');
    
    	echo $a;
    

    当前属于简单自定义模式,如果要复杂,可以在某些影响代码功能的错误发生后,让用户跳转到某个指定界面。

  • 相关阅读:
    torch上疑问用法总结
    matplotlib库介绍
    java学习总结
    java高级并发编程实战
    java的spi思想--打破双亲委派模型的操作
    linux设置静态ip步骤流程
    jvm调优参数设置
    jvisualvm插件的基本使用
    jvm常见的gc种类
    jvm调优案例与步骤
  • 原文地址:https://www.cnblogs.com/seintf/p/14160855.html
Copyright © 2011-2022 走看看