国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php開發時容易忘記的一些技術細節

2024-05-04 23:42:42
字體:
來源:轉載
供稿:網友
本文給大家分享的是在使用PHP做開發的時候,比較容易忽視的2個小細節,分別是empty和in_array,有需要的小伙伴可以來參考下。
 

在做開發的時候,有可能會忘記掉一些技術細節。這些細節有可能會造成很嚴重的后果,比如網站被注入、網站崩潰等等。現在我們總結一下,有可能會遇到的一些 PHP 中的一些 “陷阱”。

陷阱一:empty()

<?php//以下代碼會直接導致PHP解析錯誤$arr1 = [1, 2, 3];$arr2 = [3, 4];if(empty(array_diff($arr1, $arr2))) { //解析錯誤  echo 'empty';} else {  echo 'not empty';}

最新的官網手冊對此有特別說明:

Note:

在 PHP 5.5 之前,empty() 僅支持變量;任何其他東西將會導致一個解析錯誤。

換言之,下列代碼不會生效: empty(trim($name))。 作為替代,應該使用trim($name) == false.
我最近一次遇到該錯誤,是使用 Phalcon 開發的時候,服務器一直報 503 錯誤,剛開始會覺得莫名其妙,通過逐行排除,才發生由于 empty 的錯誤用法導致的。當然,自從 PHP 5.5 開始,empty 已經支持這種寫法了。

陷阱二: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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大理市| 监利县| 定襄县| 汉沽区| 峨山| 东源县| 武冈市| 澳门| 通城县| 嵊泗县| 闵行区| 邮箱| 四平市| 重庆市| 云霄县| 安仁县| 于都县| 汽车| 陆河县| 扎鲁特旗| 福海县| 汕尾市| 琼中| 汝城县| 鹿泉市| 资阳市| 巴东县| 天津市| 博客| 贺兰县| 盐山县| 平遥县| 兰溪市| 泰兴市| 长治县| 库尔勒市| 河池市| 东乡族自治县| 青川县| 彭州市| 东山县|