在研究php.ini设置报错等级之前,我们先来讨论一下二进制的运算。IT行业有句谚语是:世界上只有两种人,分别是懂二进制而不懂二进制的。
这里浅析二进制的几种运算
先来认识一下关于进制互相转换的函数
php进制转换函数如下:
bindec() — 二进制转换为十进制
decbin() — 十进制转换为二进制
dechex() — 十进制转换为十六进制
decoct() — 十进制转换为八进制
hexdec() — 十六进制转换为十进制
octdec() — 八进制转换为十进制
base_convert()– 在任意进制之间
来看运算符^ & |
^ 表示表示异或 前后两个值同样的时候为0 反之为1
& 表示且 前后两个值必须都为1的时候 为1 反之为0
| 表示只要有一个值为1的时候 那么结果便是1
运算举例
php进制转换函数如下:
bindec() — 二进制转换为十进制
decbin() — 十进制转换为二进制
dechex() — 十进制转换为十六进制
decoct() — 十进制转换为八进制
hexdec() — 十六进制转换为十进制
octdec() — 八进制转换为十进制
base_convert()– 在任意进制之间转换数字
$a = 5;
echo $a."<br>";
echo "转为二进制".decbin($a);
echo "<br>";
$b = 6;
echo $b."<br>";
echo "转为二进制".decbin($b);
echo "<br>";
//理解三种运算且,或,异或
echo $c=$a^$b;
echo "<br>";
echo "转为二进制".decbin($c);
echo "<br>";
//位运算
$start=3;
$result=$start<<1;//右移动,左移动
echo $result;
PHP报错类型有多个,我们可以用二进制串来判断报错类型是否开启多少个
定义和用法:
error_reporting() 设置 PHP 的报错级别并返回当前级别。
函数语法:
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:
值 常量 描述
1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。
2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。
4 E_PARSE 编译时解析错误。解析错误只由分析器产生。
8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)
16 E_CORE_ERROR PHP启动时初始化过程中的致命错误。
32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)。
64 E_COMPILE_ERROR 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。
128 E_COMPILE_WARNING 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。
256 E_USER_ERROR 用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR)
512 E_USER_WARNING 用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告)
1024 E_USER_NOTICE 用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集)
2048 E_STRICT 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。
4096 E_RECOVERABLE_ERROR 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler())
细心的同学可能会发现,报错类型对应的十进制数字是二的幂,那么是怎么得来的呢。
比如一个二进制是10那么转为10进制数便是1*2^1+0*2^0=2
上述共有十三个类型 也就是说 我们可以用13位的二进制数去表示相应是否开启的报错类型
1 1 1 1 1 1 1 1 1 1 1 1 1
我们0代表关闭,1代表开启,就可以很直观。
假设我们要开启2 E_WARNING 4 E_PARSE
那么只需2+4
然后PHP语句中加入error_reporting(2+4);//就可以顺利开启两个报错类型
当然error_reporting(0); 则是不报告任何错误,但是开发中,建议尽可能的报错。然后当项目投入使用的时候,则应该屏蔽错误,因为防止脚本执行错误的时候,报错功能会把当前脚本的位置暴露出来,造成不安全的因素。
关于二进制的应用我们还可以用于平时的开发中,把所有的权限列出来。管理员,会员,游客。则可以用简单的一个数字就可以判断操作级别,节省了空间。而且可以通过上述二级制的运算巧妙地剔除或者增加一些用户的权限!