PHP基础3--文件加载-错误处理
主要:
1-文件加载
2-错误处理
文件加载
文件加载语句
1) 4个文件加载语句:include, require, include_once, require_once
2) 使用形式相同。include “要加载的文件完整路径”; 或 include(“要加载的文件完整路径”);
如: include "d:/index.php";
3) 可以载入的文件: php 或 html文件
路径
1) 相对路径: 相对于当前网页文件所在的位置来定位某个被加载的文件位置
./ : 表示当前位置,即当前网页文件所在的位置(目录);
../ : 表示上一级位置,即当前网页文件所在的位置的上一级位置(目录);
2)绝对路径
本地绝对路径; 如: include "d:/demo/index.php";
网络绝对路径; 如: include "http://www.baidu.com/demo/index.php"
3) 不写路径,直接文件名
实质是加载当前目录下的指定文件名
如: include "index.php"; //PHP语言引擎会在当前网页目录下找该文件
文件载入执行过程
step 1: 从include|require 语句处退出PHP脚本模式(进入html代码模式)
step 2:载入include|require 语句所设定的文件中的代码,并执行
step 3:退出html模式重新进入php脚本模式,继续之后的代码
include,include_once, require,require_once的区别
1) include 与 require 的区别, 或 include_once与require_once的区别
include或include_once 载入文件失败时(即没有找到该文件),报“提示错误“,然后继续执行后续代码;
require 或 require_once载入文件失败时,报错并立即终止执行。
一般,require用于在程序中,后续的代码依赖于载入的文件的时候。
2) inlcude 与 include_once, 或require与require_once的区别
include 或 require载入的文件不判断是否重复,只要有include或 require语句,就会载入一次---即可能重复载入。
include_once或require_once载入的文件会有内部判断机制是否“前面代码“已经载入过,如果载入过,就不再载入。
如: 如网页中常见两边有相同的广告,就是用include
被载入文件中return的使用
1) include,require,include_once,require_once载入语句,如果载入成功返回1,载入失败返回false
2) 如果被载入的文件中有return, 则在该return后的该文件内容不被载入 --终止载入
可以用于: 被载入文件给载入文件返回一个数据
错误处理
错误分类
1) 语法错误
如果语法有错误,就会立即报错,并且不会去执行程序
2) 运行时错误
在程序语法检查通过后,开始运行程序,并在此过程中遇到的错误
常见3类错误: 提示性错误,警告性错误,致命错误
3) 逻辑错误
程序本身可以正常执行,没有报错。但并不是想要的结果。
错误分级
1) 技术层面的错误分级: PHP语言中,将各种错误进行了不同级别的分类归纳
每一级别的错误,都有一个“代号”,这个代号是系统内部的一个“常量”
2)系统常见错误
E_ERROR: 致命错误
E_WARNING: 警告性错误
E_NOTICE: 提示性错误
3) 用户自定义错误
E_USER_ERROR: 自定义致命错误
E_USER_WARNING: 自定义警告性错误
E_USER_NOTICE: 自定义提示性错误
4) 其他
E_STRICT: 严谨性语法检查错误
E_ALL: 代表所有错误
详细参考手册: 函数参考》影响PHP行为的扩展》错误处理和日志记录》预定义常量
<?php
function getBinStr($e) {
$s = decbin($e); //这是一个二进制数字字符串
/*
str_pad($str1,长度n,$str2,位置w)函数:
将字符串$str1,用字符串$str2填充到指定的长度n,
可以指定填充的位置w,左边填充还是右边填充
*/
$s1 = str_pad($s,16,"0",STR_PAD_LEFT);
return $s1;
}
echo "<pre>";
echo "E_EEROR = ".E_ERROR . "\t\t其对应二进制值为: " . getBinStr(E_ERROR); //
echo "<br />E_WARNING = ".E_WARNING. "\t\t其对应二进制值为: " . getBinStr(E_WARNING); //
echo "<br />E_NOTICE = ".E_NOTICE. "\t\t其对应二进制值为: " . getBinStr(E_NOTICE); //
echo "<br />E_USER_NOTICE = ".E_USER_NOTICE. "\t\t其对应二进制值为: " . getBinStr(E_USER_NOTICE); //
echo "<br />E_ALL = ".E_ALL. "\t\t其对应二进制值为: " . getBinStr(E_ALL); //
echo "</pre>";
?>
查看错误分级对应的二进制数测试
错误触发
1) 方式1: 系统触发
典型错误3种:
E_NOTICE: 提示性错误: 会输出错误提示,并继续执行后续代码;如:使用不存在的变量或常量
E_WARNING: 警告性错误: 会输出错误提示,并继续执行后续代码; 如: include载入一个不存在的文件:
E_ERROR: 致命错误: 导致程序无法执行后续语句; 如: 一个不存在的函数!!
2) 方式2: 自定义触发
1) 概念: 当处理某些数据时,数据本身没有错误,但根据具体应用(业务)的需要,会要求数据满足某种条件,而该数据并不满足的时候,可以在程序中“主动”去触发(创建)一个错误,以表明该数据的“非法性”。
2) 语法形式: trigger_error(“错误提示信息内容”,3种用户错误代号之一);
如果触发了用户的致命错误(E_USER_ERROR),会终止程序的后续执行
错误报告的显示
1) 错误报告: 显示在网页上的错误提示内容
2) 是否显示错误报告 ? display_errors
方式1:全局设置
修改配置文件php.ini 的配置项 display_errors = On; //表示显示 如果是Off表示关闭
方式2: 局部设置
在php脚本文件中使用函数ini_set()来对它进行设置; 如 ini_set("display_errors",0); //不显示错误报告
该方式设置要优先于全局设置
3) 显示哪些级别的错误报告? error_reporting
前提: display_errorrs=On;
方式1: 全局设置
修改配置文件php.ini 的配置项error_reporting, 如 : error_reporting = E_NOTICE | E_WARNING | E_ERROR
方式2: 局部设置
在php脚本文件中使用函数ini_set()来对它进行设置 , 如init_set(“error_reporting”,E_NOTICE | E_WARNING | E_ERROR),
错误日志的记录
1)是否记录错误日志? log_errors
方式1: 全局设置
修改配置文件php.ini 的配置项log_errors, 如 : log_errors= On; //记录错误日志
方式2: 局部设置
在php脚本文件中使用函数ini_set()来对它进行设置 , 如init_set(“log_errors”,1);//记录错误日志
获取php.ini配置项: ini_get("配置项"); //获取php.ini的指定配置项值
2)记录到哪里? error_log
可以指定位置或记录到系统日志中
指定位置文件中:直接使用文件名,系统会自动在文件夹下都建立该文件名,并用其记录该文件夹下的所有网页文件发生的错误信息。
ini_set("error_log", "myError.txt"); //如果有错误,将记录在myError.txt文件中
写入系统日志中: ini_set("error_log", "syslog");//所有错误日志记录到系统 日志文件 中
自定义错误处理器
1)错误处理器: 发生错误,用来处理该错误的一种方法。实质就是一个函数
2) 自定义错误处理器: 将原本有系统处理错误变为开发者自定义对错误显示和记录处理
3) 分2步:
step 1: 设定用于处理错误的函数 set_error_handler("函数名"); 如 set_error_handler('myError');
step 2: 声明定义处理错误的函数。 如 function myError($errCode, $errMsg, $errFile, $errLine) { //错误处理 }
<?php
//自定义错误处理器
//第一步: 设定要作为错误处理的函数名
set_error_handler("my_error_handler"); //第2步: 定义函数
/**
* 自定义错误处理函数
* 该函数不要在程序中调用,一发生错误会被自动调用,而且会传入该4个实参数据
* @param string $errCode 错误代号(级别)
* @param string $errMsg 错误信息的内容
* @param string $errFile 发生错误的文件名
* @param int $errLine 代表发生错误的行号
* @return void
*/
function my_error_handler($errCode,$errMsg,$errFile,$errLine) {
$str = '';
$str .= "<p><b><font color='red'>错误:</font></b>";
$str .= "<br />错误代号是:".$errCode;
$str .= "<br />错误内容是:".$errMsg;
$str .= "<br />错误文件是:".$errFile;
$str .= "<br />错误行号是:".$errLine;
$str .= "<br />发生的时间:".date("Y-m-d H:i:s");
$str .= "</p>";
echo $str; //输出该“构建”的错误完整处理结果
//可以将该内容写入到某个文件去,既记录错误日志
} //以下是错误代码
echo "<br />aaaa";
echo $v1; //使用不存在的变量
echo C1; // 使用不存在的常量
echo "<br />bbbb";
echo "<hr />";
点击查看自定义错误处理器测试
PHP基础3--文件加载-错误处理的更多相关文章
- php基础语法(文件加载和错误)
文件加载 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/包含/载 ...
- php文件加载、错误处理、方法函数和数组
数组运算符注意:php中,数组的元素的顺序,不是由下标(键名)决定的,而是完全由加入的顺序来决定.联合(+):将右边的数组项合并到左边数组的后面,得到一个新数组.如有重复键,则结果以左边的为准$v1 ...
- Java基础之Throwable,文件加载
Java中的异常与错误都继承自Throwable,Exception又分为运行时异常(RuntimeException)和编译时异常. 运行时异常是程序的逻辑不够严谨或者特定条件下程序出现了错误,例如 ...
- php基础知识(3)(文件加载include)
文件加载 综述: 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/ ...
- 文件加载---理解一个project的第一步
当我最开始写php的时候,总是担心这个问题:我在这儿new的一个class能加载到对应的类文件吗?毕竟一运行就报Fatal Error,什么**文件没找到,类无法实例化等等是一种很“低级”的错误,怕别 ...
- tensorflow_mnist数据集一直加载错误的解决办法
tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...
- OGG初始化之将数据从文件加载到Replicat
要使用Replicat建立目标数据,可以使用初始加载Extract从源表中提取源记录,并将它们以规范格式写入提取文件.从该文件中,初始加载Replicat使用数据库接口加载数据.在加载过程中,更改同步 ...
- 黄聪:VS2010启动程序提示文件加载 使用 简体中文(GB2312)编码加载文件解决办法
vs2010 错误提示框:文件加载 使用 简体中文(GB2312)编码加载文件C:\Users\Administrator\AppData\Local\Temp\nxhgjasi.5au \Temp\ ...
- 虹软人脸识别在 linux中so文件加载不到的问题
其实是可以加载到的,不过是so文件放的位置不一对,最简单的方式是放在 /usr/lib64 目录下,也可自己设置. so文件加载不到会报这个错误: .lang.UnsatisfiedLinkEr ...
随机推荐
- Spring boot配置注意事项
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项目入口类.这个类的位置很关键: 如果App ...
- java实现哈弗曼树和哈夫曼树压缩
本篇博文将介绍什么是哈夫曼树,并且如何在java语言中构建一棵哈夫曼树,怎么利用哈夫曼树实现对文件的压缩和解压.首先,先来了解下什么哈夫曼树. 一.哈夫曼树 哈夫曼树属于二叉树,即树的结点最多拥有2个 ...
- mysql主键问题
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_22314145/article/details/80824660 MySQL主键 一. MyS ...
- Linq中的in和not in的使用方法
T-SQL语句: select * from PayingRecords where ClientID='17787665-1d98-49e6-b254-a6a6553c4b42' and ID no ...
- Maven学习---使用maven进行项目构建
1. 使用maven进行项目构建 MyEclipse 自带maven 插件 Eclipse 需要单独安装maven插件 1.1. Maven 在企业中怎么用的 ? Maven : 项目构建工具 ,进行 ...
- S/4HANA业务角色概览之订单到收款篇
大家好我叫Sean Zhang,中文名张正永.目前在S/4HANA产品研发部门任职产品经理,而这一阶段要从2017年算起,而在那之前接触更多还是技术类的,比如做过iOS.HANA.ABAP.UI5等等 ...
- 如何使用jMeter对某个OData服务进行高并发性能测试
For project reason I have to measure the performance of OData service being accessed parallelly. And ...
- DQN核心思想理解
看过Deep learning(convolutional neural network),看过RL(Q-learning).但是在两者结合这一块一直弄不明白. 我的疑问在于一直不明白DL是怎样识别出 ...
- tp 查询数据库时报错 A non well formed numeric value encountered
在database.php中配置或修改 'datetime_format' => false,
- C# using、namespace使用注意事项
一.using 用法 1.引用命名空间. 如: using System; 2.自动释放对象使用的资源. 如: using (SqlConnection connection = new SqlCon ...