Some technical details that are easy to forget when developing PHP

WBOY
Release: 2016-07-29 09:04:13
Original
891 people have browsed it

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()

<&#63;php
//以下代码会直接导致PHP解析错误
$arr1 = [1, 2, 3];
$arr2 = [3, 4];
if(empty(array_diff($arr1, $arr2))) { //解析错误
  echo 'empty';
} else {
  echo 'not empty';
}
Copy after login

The latest official website manual has special instructions on this:

Note:

在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。
Copy after login

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()

<&#63;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,此结果明显错误
Copy after login

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:

<&#63;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
Copy after login

For safety reasons , it is recommended to use the following method to judge:

<&#63;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,这是正确的结果

Copy after login

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.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template