개발할 때 일부 기술적인 세부 사항을 잊어버릴 수도 있습니다. 이러한 세부정보는 웹사이트 삽입, 웹사이트 충돌 등 심각한 결과를 초래할 수 있습니다. 이제 PHP에서 접할 수 있는 몇 가지 "함정"을 요약해 보겠습니다.
트랩 1: 비어 있음()
<?php //以下代码会直接导致PHP解析错误 $arr1 = [1, 2, 3]; $arr2 = [3, 4]; if(empty(array_diff($arr1, $arr2))) { //解析错误 echo 'empty'; } else { echo 'not empty'; }
최신 공식 웹사이트 매뉴얼에는 이에 대한 특별 지침이 있습니다.
참고:
在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。
즉, 다음 코드는 적용되지 않습니다:empty(trim($name)). 대안으로, Trim($name) == false를 사용해야 합니다.
이 오류를 마지막으로 접한 것은 Phalcon으로 개발할 때였습니다. 처음에는 서버에서 503 오류가 계속 보고되어 당황스러웠습니다. 한 줄씩 공백을 잘못 사용하여 발생합니다. 물론, PHP 5.5부터 공백이 이 쓰기 방식을 지원했습니다.
트랩 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,此结果明显错误
이 문제는 웹 사이트가 SQL에 의해 주입되었기 때문에 발견되었습니다. 다행히 그때 테스트 중이었습니다. 당시 발견됐지만 심각한 결과는 없었다.
in_array() 함수 사용과 관련하여 주목할만한 다른 사항이 있습니다. PHP 매뉴얼에는 이 함수의 "이상한" 동작을 설명하기 위해 네티즌이 제공한 많은 예제가 있습니다. , 예:
<?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
안전을 위해 다음 방법을 사용하여 판단하는 것이 좋습니다.
<?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,这是正确的结果
위 내용은 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.