PHP天坑总结
2023-02-18 16:45:00 时间
PHP天坑你懂得,不断总结中。。。
语言结构
语言结构不是函数,你可以把它理解为和 if
、while
等价。由于少了一层解析,所以速度更快!
技巧:
isset() vs strlen() - a fast/clear string length calculation
注意:
参数中不能再有运算,错误的用法 echo(1 + 2)
。
echo()
print()
die()
isset()
unset()
include() //注意,include_once()是函数
require() //注意,require_once()是函数
array()
list()
empty()
empty
如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。 除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词。参见转换为布尔值获取更多信息。
也就是说,下面的东西被empty返回真
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
所以,如果你需要的变量非'空',之前如果你这样写
if(isset($_POST['passwd'] && $_POST['passwd'])){
...
}
// 可以替换为
if(!empty($_POST['passwd'])){
...
}
特别注意
5.4.0起,检查字符的非数字偏移量将会返回 TRUE。
$expected_array_got_string = 'some string';
//5.3全FALSE
var_dump(empty($expected_array_got_string['some_key'])); //5.4 TRUE
var_dump(empty($expected_array_got_string[0])); //FALSE
var_dump(empty($expected_array_got_string['0'])); //特殊 FALSE
var_dump(empty($expected_array_got_string[0.5])); //FALSE
var_dump(empty($expected_array_got_string['0.5'])); //5.4 TRUE
var_dump(empty($expected_array_got_string['0 Mostel'])); //5.4 TRUE
isset
检测变量是否设置,并且不是 NULL,可以接多个变量。
$foo = NULL;
var_dump(isset($foo)); // FALSE
5.4.0起,检查字符的非数字偏移量将会返回 FALSE,结果与
empty
相反。
$expected_array_got_string = 'some string';
//5.3全TRUE
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
安全检查
有些教程告诉你用户输入的变量需要过滤,以POST为例
$_POST = array_map('trim', $_POST)
但是你有没有考虑过这个表单?
<form method="POST" action="" accept-charset="utf-8">
<p>
<label>first_field</label><br />
<input type="text" id="first_field" name="field[1][points]" /><br />
<input type="radio" value="inside" name="field[1][group]" checked /><br />
<input type="radio" value="outside" name="field[1][group]"><br />
</p>
<p>
<label>second_field</label><br />
<input type="text" id="second_field" name="field[2][points]" /><br />
<input type="radio" value="inside" name="field[2][group]" checked /><br />
<input type="radio" value="outside" name="field[2][group]"><br />
</p>
</form>
正确的姿势需要你慢慢体会,老高在此给一些参考,围绕着关键词 php sanitize。
What's the best method for sanitizing user input with PHP? Which is the best way to sanitize user input in PHP?
== 比较运算符
这个就更精彩了,不过存在即合理,建议多看看手册 - 比较运算符
相关文章
- Linux安装Nginx二-基于源码编译安装
- Linux安装Nginx1-基于yum安装
- git commit 代码提交规范
- git status 查看状态文件名乱码
- MySQL server has gone away
- PHP 中的 final 关键字
- PHP 命令行指令
- PHP 代码复用机制 trait
- git stash 命令详解(保存开发进度)
- .git 目录结构内容解析
- linux 命令之查看文件内容
- git fetch 命令详解
- PHP 导出 Excel 报错: Formula Error: An unexpected error occurred
- git mv 从工作区和暂存区中重命名内容
- Github Actions Hexo 自动部署
- 名额有限,快来!带你体验 Google 的工程师文化
- C++ 调用 Halcon 时大尺寸操作无效问题的解决方案
- PHP常用类 – 取随机字符串
- 无比详细的PHP文件缓存类详解
- PHP开发中常用设计模式