When developing, you may forget some technical details. These details may cause serious consequences, such as website injection, website crash, etc. Now let's summarize some of the "traps" in PHP that you may encounter.
Trap 1: empty()
<?php //以下代码会直接导致PHP解析错误 $arr1 = [1, 2, 3]; $arr2 = [3, 4]; if(empty(array_diff($arr1, $arr2))) { //解析错误 echo 'empty'; } else { echo 'not empty'; }
The latest official website manual has special instructions on this:
Note:
在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。
In other words, the following code will not take effect: empty(trim($name)) . As an alternative, you should use trim($name) == false.
The last time I encountered this error was when I was using Phalcon to develop. The server kept reporting 503 errors. It felt baffling at first. After excluding them line by line, it happened because Caused by incorrect usage of empty. Of course, since PHP 5.5, empty has supported this writing method.
Trap 2: in_array()
<?php //判断数组里是否存在用户所提交的用户 ID //$post_dirty_id = '1092'; $post_dirty_id = '1092 ORDER BY #1'; $safe_arr = [ 987 => '小明', 1092 => '汤姆', 1256 => '奥立升' ]; if(in_array($post_dirty_id, array_keys($safe_arr))) { echo 'find me'; } else { echo 'do not find me'; } //输出结果:find me,此结果明显错误
I discovered this problem because the website was injected with SQL. Fortunately, it was discovered during the test and there were no serious consequences.
Regarding the use of the in_array() function, there are other things worthy of our attention. In the PHP manual, there are a large number of examples provided by netizens to illustrate the "weird" behavior of this function, such as:
<?php $a = ['a', 32, true, 'x' => 'y']; var_dump(in_array(25, $a)); // true, one would expect false var_dump(in_array('ggg', $a)); // true, one would expect false var_dump(in_array(0, $a)); // true var_dump(in_array(null, $a)); // false
For safety reasons , it is recommended to use the following method to judge:
<?php //判断数组里是否存在用户提交的 ID //$post_dirty_id = '1092'; $post_dirty_id = '1092 ORDER BY #1'; $safe_arr = [ 987 => '小明', 1092 => '汤姆', 1256 => '奥立升' ]; if(isset($safe_arr[$post_dirty_id])) { echo 'find me'; } else { echo 'do not find me'; } //输出结果:do not find me,这是正确的结果
The above introduces some technical details that are easy to forget when developing PHP, including aspects. I hope it will be helpful to friends who are interested in PHP tutorials.