assert函数的用法
来源:互联网 发布:mysql 查询临时表 编辑:程序博客网 时间:2024/05/22 11:58
assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;
例如
<?php$s = 123;assert("is_int($s)");?>
从这个例子可以看到字符串参数会被执行,这跟eval()类似。不过eval(
codestr)只是执行符合php编码规范的 code_str。
assert的用法却更详细一点。assert_option()可以用来对assert()进行一些约束和控制; 默认值
ASSERT_ACTIVE=1 //Assert函数的开关ASSERT_WARNING =1 //当表达式为false时,是否要输出警告性的错误提示,issue a PHP warning for each failed assertionASSERT_BAIL= 0 //是否要中止运行;terminate execution on failed assertionsASSERT_QUIET_EVAL= 0 //是否关闭错误提示,在执行表达式时;disable error_reporting during assertion expression evaluation ASSERT_CALLBACK= (NULL) // 是否启动回调函数 user function to call on failed assertions
如果按照默认值来,在程序的运行过程中调用assert()来进行判断表达式,遇到false时程序也是会继续执行的,这在生产环境中这样使用是不好的,而
在开发调试环境中,却是一种debug的不错的方式。特别是用上callback的方法,可以知道具体的出错信息。例如
<?php// Active assert and make it quietassert_options(ASSERT_ACTIVE, 1);assert_options(ASSERT_WARNING, 0);assert_options(ASSERT_QUIET_EVAL, 1);// Create a handler functionfunction my_assert_handler($file, $line, $code){ echo "<hr>Assertion Failed:File '$file'<br />Line '$line'<br />Code '$code'<br /><hr />";}// Set up the callbackassert_options(ASSERT_CALLBACK, 'my_assert_handler');// Make an assertion that should failassert('mysql_query("")');?>
所以,php的官方文档里头是建议将assert用来进行debug,我们可以发现还有一个开关ASSERT_ACTIVE可以用来控制是否开启debug。
现在问题就产生了,如果程序员在开发的时候在代码中留下了很多assert(),然后在程序发布的时候关闭执行,设置assert_options(ASSERT_ACTIVE,0);这样做是否可行?有没有安全问题?
我的建议是,既然assert主要作用是debug,就不要在程序发布的时候还留着它。在程序中用assert来对表达进行判断是不明智的,原因上文说了,
一个是在生产环境中assert可能被disabled,所以assert不能被完全信任;二是assert()可以被继续执行;而如果在生产环境让ASSERT_ACTIVE=1,那这个表达式字符串可以被执行本身就存在安全隐患。
例如
<?phpfunction fo(){ $fp = fopen("c:/test.php",'w'); fwrite($fp,"123"); fclose($fp); return true;}assert("fo()");?>
转载地址
https://www.douban.com/note/217557007/
- assert函数的用法
- assert()函数的用法
- 函数assert的用法?
- assert()函数的用法
- assert()函数的用法
- assert函数的用法
- 【php】assert函数的用法
- assert()函数的用法总结
- php中assert函数的用法
- C++中assert函数的用法介绍
- C++中assert函数的用法介绍
- c/c++中assert()函数的用法
- Python中assert函数的用法小结
- C语言中assert函数的用法
- assert() 函数用法
- assert() 函数用法
- assert() 函数用法
- assert() 函数用法
- java排序算法
- 如何与他人共享你的JavaWeb项目(一)花生壳内网穿透使用教程(新手上路)
- ELK Stack 之X-Pack安装使用详解
- 求圆的面积和周长
- RabbitMQ中 exchange、route、queue的关系
- assert函数的用法
- 同步工具CountDownLatch
- 20171219
- java设计模式之单例模式
- 107-Binary Tree Level Order Traversal II
- 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用 他人代码,借鉴
- 070day(动态规划思路,例题(最长上升子序列)和流操纵算子)
- java中二维数组
- Bootstrap CSS3基础排版