magic_quotes_gpc 合magic_quotes_runtime的區別!

前天在本機安裝了一個輕量級的blog系統emlog,可是一直安裝不成功,最後才檢查出來,原來是我本地環境有問題,就是這個

magic_quotes_runtime影響的,emlog沒有對這個判斷。我認識magic_quotes_runtime還是在看discuz源碼時。

 

PHP提供兩個方便我們引用數據的魔法引用函數magic_quotes_gpc和 magic_quotes_runtime,這兩個函數如果在php.ini設置爲ON的時候,就會爲我們引用的數據碰到單引號'和雙引號"是自動加上反 斜線,幫我們自動轉譯符號,確保數據操作的正確運行,可是我們在php不同的版本或者不同的服務器配置下,有的magic_quotes_gpc和 magic_quotes_runtime設置爲on,有的又是off,所以我們寫的程序必須符合on和off兩種情況。那麼 magic_quotes_gpc和magic_quotes_runtime兩個函數有什麼區別呢?看下面的說明:

magic_quotes_gpc
作用範圍是:WEB客戶服務端;
作用時間:請求開始是,例如當腳本運行時.

magic_quotes_runtime
作用範圍:從文件中讀取的數據或執行exec()的結果或是從SQL查詢中得到的;
作用時間:每次當腳本訪問運行狀態中產生的數據.

所以

magic_quotes_gpc的設定值將會影響通過Get/Post/Cookies獲得的數據
magic_quotes_runtime的設定值將會影響從文件中讀取的數據或從數據庫查詢得到的數據

例子說明:

$data1 = $_POST['aaa'];
$data2 = implode(file('1.txt'));
if(get_magic_quotes_gpc()){
      //把數據$data1直接寫入數據庫
}else{
      $data1 = addslashes($data1);
      //把數據$data1寫入數據庫
}
if(get_magic_quotes_runtime()){
      //把數據$data2直接寫入數據庫
//從數據庫讀出的數據要經過一次stripslashes()之後輸出
}else{
      $data2 = addslashes($data2);
      //把數據$data2寫入數據庫
//從數據庫讀出的數據直接輸出
}

另外magic_quotes_runtime可以通過set_magic_quotes_runtime設定,0 for off,1 for on。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章