Apols如果此前已被詢問。我使用別人的PHP代碼和整個以下行來了:{0}在PHP語句中的含義是什麼?
if($_GET['file']{0}=='.') die('Wrong file!');
的如果,$ _ GET和死我理解,但究竟是什麼意思{0}的$ _GET後[「文件」] ?我瀏覽了一些教程,沒有看到答案。
TIA。
Apols如果此前已被詢問。我使用別人的PHP代碼和整個以下行來了:{0}在PHP語句中的含義是什麼?
if($_GET['file']{0}=='.') die('Wrong file!');
的如果,$ _ GET和死我理解,但究竟是什麼意思{0}的$ _GET後[「文件」] ?我瀏覽了一些教程,沒有看到答案。
TIA。
$str{0}
將返回字符串的第一個字符/字節。但the syntax $str{0}
is deprecated in favor of $str[0]
:
注:字符串也可以使用大括號訪問,如
$str{42}
,爲了同樣的目的。但是,從PHP 5.3.0起,此語法已棄用。改用方括號,如$str[42]
。
如果您使用的是多字節字符,請改爲使用mb_substr
。
{0}
與[0]
相同。因此,$_GET['file']{0}
正在從$_GET['files']
獲得第零個字符。
不正確;你聽起來像[]和{}是一樣的。他們不是。 {}是一個字符串索引 - 即字符串位置x處的字符。 – Spudley 2010-09-16 14:48:01
''''和'{}'是一樣的!請參閱:http://ideone.com/fG7nD – 2010-09-16 14:50:34
人們可以刪除downvotes嗎? – 2010-09-16 14:54:22
這是訪問字符串的第一個字符的簡寫。 $ _GET ['file'] {1}將是第二個字符,依此類推。所以在你的例子中,它檢查第一個字符是否是一個點,如果是,退出;大概是爲了避免人們在URL中傳遞路徑,如../../../etc/passwd。
但請記住,這個「檢查」是不夠的。一個可以直接使用「/ etc/passwd」,並且有多種文件系統的攻擊向量。請參閱http://www.evilaliv3.org/articles/php-filesystem-attack-vectors/ – 2010-09-16 15:00:56
感謝您的解釋Tim和爲鏈接1月 – SteveWilkinson 2010-09-16 20:06:20
正如其他人所說,它正在查看$ _GET ['file']變量中的字符串位置0,並在出現錯誤時拋出一個錯誤。
這看起來像是一種防止黑客攻擊的方法(通過阻止用戶訪問以點開頭的文件)。
感謝您解釋檢查的重點 - 也是一個謎。 – SteveWilkinson 2010-09-16 20:05:14
+1表示已被棄用。 **請勿使用此通知!** – NikiC 2010-09-16 14:48:18
Thx用於全面回答問題。 – SteveWilkinson 2010-09-16 20:10:46
**如果你想要使用這個符號!**(不要總是相信你在手冊中讀到的內容):-) – salathe 2010-09-28 21:24:50