错误处理
错误分为:
语法错误: 代码不会被执行. 直接报告代码中的错误.
运行时错误: 代码会被执行, 执行到错误的地方, 才报错.
逻辑错误: 代码执行, 不会报错, 但就不是想要的结果.
所有报出来的错误级别, 可以分为:
提示性错误( Notice )
警告性错误( Warning )
致命性错误( Fatal error )
举例:
<?php
getType($a); // 未定义变量, 提示性错误
getType( ); // 缺少参数, 警告性错误
getTypes( ); // 函数名不对, 致命性错误
?>
错误报告方式:
页面上显示错误信息 + 错误记录在日志文件
不同的环境选择不同的报告方式:
1) 开发环境 (Development)
2) 生产环境 (Production)
通过修改 php.ini 决定错误处理方式
**display_errors = **On/Off 是否在页面上显示错误信息
**log_errors = **On/Off 是否把发生的错误记录在日志文件中
**error_log = **“D:\xampp\php\logs\php_error_log” 日志文件的位置
error_reporting = 设置哪些错误需要报告, 其他错误就不报告了
**error_reporting = **E_ALL & ~E_NOTICE 所有错误都报告, 除了提示性错误
在php代码中临时修改 错误处理方式
ini_get( ‘error_log’ ) 获取 php.ini 中的某项设置
ini_get_all( ) 可以一次性获取所有选项
ini_set( ‘display_errors’, ‘On’ ) 临时修改 php.ini 中的某项. 仅在当前文件中有效.
error_reporting( ) 设置应该报告何种 PHP 错误
<?php
// 关闭所有PHP错误报告
error_reporting(0);
// 除了 E_NOTICE,报告其他所有错误
error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL & ~E_NOTICE);
// 报告所有 PHP 错误
error_reporting(-1);
// 报告所有 PHP 错误 (参见 changelog)
error_reporting(E_ALL);
// 和 error_reporting(E_ALL); 一样
ini_set('error_reporting', E_ALL);
时间戳
指的是, 格林威治时间 1970 年 1 月 1 日 00:00:00 到当前时间的秒数。
计算机中多用时间戳的形式, 来计算和存储时间和日期
生成时间戳
time( ) 获取当前的时间戳
strtotime(‘2017-03-20 12:00:00’) 以字符串形式, 指定某天的时间戳
mktime(时, 分, 秒, 月, 日, 年) 以数值形式, 指定某个时刻的时间戳
getDate( ) 返回数组形式的时间信息
格式化时间戳
格式化, 是指把不好看懂的时间戳转换化,方便理解的 年月日时分秒的形式
date(‘Y-m-d H:i:s’, 时间戳)
‘Y-m-d H:i:s’ 格式化字符串
Y 4位格式的 年数
m 2位格式的 月份
d 2位格式的 日期
H 2位格式的 小时
i 2位格式的 分钟
s 2位格式的 秒数
时间戳 参数为可选. 如果不填, 默认为当前时间
date_default_timezone_set(‘PRC’)
格式化时间戳有一个时区的概念, 上面代码把时区设置为 中国
测量代码执行时间
<?php
$start = microtime(true);
..... 要测量的代码
$stop = microtime(true);
echo $stop - $start; // 结束时间 - 开始时间 = 代码执行的时间
?>
文件处理
目录操作
常用目录操作函数
打开目录, 读取目录, 关闭目录
<?php
$dir = './images/';
$hd = opendir( $dir ); // 打开目录, 返回资源类型, 用 $hd 来代表被打开的目录
$f = readdir( $hd ); // 读取目录, $f 为目录里面的文件名, 每次读出一个新的文件名
/*
读取到最后, 会返回 false
每个目录中都会有两个隐藏目录 . 和 ..
*/
closedir( $hd ); // 关闭目录
?>
遍历目录
<?php
$dir = './images/';
$hd = opendir($dir); // 打开目录
// 逐条读取目录中的文件名
while ( ($f = readdir($hd)) !== false ) {
// 跳过目录中的 . 和 .. 目录
if ($f == '.' || $f == '..') { continue; }
// 输出文件名
echo $f;
}
closedir( $hd ); // 关闭目录
/*
如果文件名是 '0' 会误判断为 false, 从而提前结束跳出循环,
所以加一个 !== 判断
*/
file_exists( 带路径的文件名或目录名 ) 检查文件或目录是否存在. 存在返回 true 否则返回 false
is_dir( 带路径的文件名 ) 判断一个给定的文件名是否是一个目录
filetype( 带路径的文件名 ) 获取文件类型
filesize( 带路径的文件名 ) 获取文件的大小, 单位为字节
fileatime( 带路径的文件名 ) 获取文件的 上一次访问时间
filectime( 带路径的文件名 ) 获取文件的 创建时间
filemtime( 带路径的文件名 ) 获取文件的 修改时间
dirname( 路径 ) 返回路径中的目录部分. 如果路径本身是一个目录, 函数会返回它的父目录.
basename( 路径 ) 返回基本的文件名
realpath( 文件或目录 ) 获取文件或目录 在本地电脑上的磁盘路径
pathinfo( 路径 ) 返回文件路径的信息
copy( 源文件名, 新文件名 ) 复制文件
mkdir( 名称 ) 新建目录
rmdir( 空目录名称 ) 删除一个空目录
unlink( 文件名 ) 删除一个文件
文件操作
fopen(文件名, 打开方式) 打开一个文件. 返回一次资源.
fwrite(文件资源, 写入的内容)
fread(文件资源, 读取的字节数)
fclose(文件资源)
<?php
/* 写文件 */
$hf = fopen('./xxoo.txt','w'); // 找开一个文件,返回资源. 之后 $hf 就代表这个文件
fwrite($hf, 'abcd'); // 将 'abcd' 写入文件 开头写入
fclose( $hf ); // 关闭文件. 文件不用了就要及时关闭
?>
<?php
/* 写文件 */
$hf = fopen('./xxoo.txt','a'); // 找开一个文件,返回资源. 之后 $hf 就代表这个文件
fwrite($hf, 'abcd'); // 将 'abcd' 写入文件 追加写入
fclose( $hf ); // 关闭文件. 文件不用了就要及时关闭
?>
<?php
/* 读文件 */
$hf = fopen('./xxoo.txt','r'); // 找开一个文件
echo fread($hf, 4); // 读取4个字节内容, 显示到页面
fclose( $hf ); // 关闭文件.
?>
其它文件函数
fgetc( 文件资源 ) 从文件指针位置读取一个字符
fgets( 文件资源 ) 从文件指针位置读取一行内容
file( 文件名 ) 将整个文件读入一个数组中