2015-11-04 39 views
2

我發現下面的代碼檢查stripslashes()函數是否存在。爲什麼要檢查stripslashes函數是否存在?

if (function_exists('stripslashes')) { 
    // Do something 
} else { 
    // Do something 
} 

stripslashes()功能適用於PHP4和PHP5,所以我不知道爲什麼它需要一個條件語句來檢查函數存在。我不明白。

這不是一個主觀問題。只要告訴我這個聲明的用法和不使用聲明有什麼區別。提前致謝!

這裏有相關鏈接,以它們被用來其中:

+1

*好問題*。 TBH,我不知道。也許可以檢查一些編碼器是否已經創建了一個名爲「相同」的自定義函數,或者有人攻擊了核心並將其刪除?但是,if(function_exists('mysql_real_escape_string'))'也是一樣的。如果服務器不支持那些舊的和不推薦的'mysql_'函數,則需要條件語句。 –

+0

*「我發現下面的代碼檢查stripslashes()函數是否存在。」* - 小心共享該鏈接? –

+1

也許他們認爲該功能將在某一天被刪除,因爲它主要用於的功能已被刪除? –

回答

3

曾經有被稱爲magic quotes,這雖然用心良苦PHP中的功能,造成了無盡的困惑。

此代碼很可能用於檢測魔術引號,但這不是正確的方法,尤其是因爲它不起作用。

檢測是否啓用魔術引號的正確方法是使用功能爲get_magic_quotes_gpc這樣的功能製作。

if (get_magic_quotes_gpc()) { 

或者,也許下面,如果你擔心這個將被刪除。

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { 

話雖這麼說,整個魔術引號功能輾轉回到在PHP 5.4,所以,除非你需要支持PHP的過時的版本,你可以忘記整個事情曾經存在(除非你使用WordPress是...)。

在附註中,我想有可能stripslashes函數可能在將來被刪除,並且可能在一個點上不存在,但在這種情況下可能不是原因。

+0

偉大的答案亞歷山大。 –

3

旁註:從我的一些評論(稍作修改)轉錄,以免費回答亞歷山大的問題。


這可能是檢查是否存在編碼器去創造一個自定義的函數調用相同,或有人入侵PHP核心和刪除它(到別人瘋狂的方法?);我當然猜測,這不是不可能的。

但是,if (function_exists('mysql_real_escape_string'))也是一樣的。

如果服務器不支持那些陳舊和不贊成使用的mysql_ functions,那麼條件語句是必需的,並且將證明對於要使用的某些特性有效/有用。

參考文獻:(mysql_作爲PHP 7的移除,以及其他棄用通知)

就個人而言,function_exists()只應針對可能棄用使用功能; mysql_是其中之一,session_register() - 我相信還有更多。

它在手冊中列出了貢獻說明http://php.net/manual/en/function.stripslashes.php,它似乎與magic_quotes_gpc有關,就像Alexander(O'Mara)在評論中所說的那樣。


N.B:

我絕不希望獲得來自這樣的東西,但對於其他人訪問的問題。

+1

好的補充。我看到一些漂亮的黑客入侵PHP安裝。有些人在所有錯誤的地方尋找安全。 –

+0

@ AlexanderO'Mara感謝亞歷山大。讓我想起了我用來破解我的'command.com'文件的那些日子。啊,DOS的日子。 *乾杯* –

相關問題