2010-09-16 53 views
3

Apols如果此前已被詢問。我使用別人的PHP代碼和整個以下行來了:{0}在PHP語句中的含義是什麼?

if($_GET['file']{0}=='.') die('Wrong file!'); 

的如果,$ _ GET和死我理解,但究竟是什麼意思{0}的$ _GET後[「文件」] ?我瀏覽了一些教程,沒有看到答案。

TIA。

回答

11

$str{0}將返回字符串的第一個字符/字節。但the syntax $str{0} is deprecated in favor of $str[0]

注:字符串也可以使用大括號訪問,如$str{42},爲了同樣的目的。但是,從PHP 5.3.0起,此語法已棄用。改用方括號,如$str[42]

如果您使用的是多字節字符,請改爲使用mb_substr

+4

+1表示已被棄用。 **請勿使用此通知!** – NikiC 2010-09-16 14:48:18

+0

Thx用於全面回答問題。 – SteveWilkinson 2010-09-16 20:10:46

+0

**如果你想要使用這個符號!**(不要總是相信你在手冊中讀到的內容):-) – salathe 2010-09-28 21:24:50

5

{0}[0]相同。因此,$_GET['file']{0}正在從$_GET['files']獲得第零個字符。

+0

不正確;你聽起來像[]和{}是一樣的。他們不是。 {}是一個字符串索引 - 即字符串位置x處的字符。 – Spudley 2010-09-16 14:48:01

+3

''''和'{}'是一樣的!請參閱:http://ideone.com/fG7nD – 2010-09-16 14:50:34

+0

人們可以刪除downvotes嗎? – 2010-09-16 14:54:22

4

這是訪問字符串的第一個字符的簡寫。 $ _GET ['file'] {1}將是第二個字符,依此類推。所以在你的例子中,它檢查第一個字符是否是一個點,如果是,退出;大概是爲了避免人們在URL中傳遞路徑,如../../../etc/passwd。

+0

但請記住,這個「檢查」是不夠的。一個可以直接使用「/ etc/passwd」,並且有多種文件系統的攻擊向量。請參閱http://www.evilaliv3.org/articles/php-filesystem-attack-vectors/ – 2010-09-16 15:00:56

+0

感謝您的解釋Tim和爲鏈接1月 – SteveWilkinson 2010-09-16 20:06:20

1

正如其他人所說,它正在查看$ _GET ['file']變量中的字符串位置0,並在出現錯誤時拋出一個錯誤。

這看起來像是一種防止黑客攻擊的方法(通過阻止用戶訪問以點開頭的文件)。

+0

感謝您解釋檢查的重點 - 也是一個謎。 – SteveWilkinson 2010-09-16 20:05:14

相關問題