今天在讀ecshop的原始碼中發現裡面有幾個地方涉及到了php魔術引號,之前也碰到過都忽略過去了,再次碰到該深入的理解,雖然自php 5.3.0起魔術引號被廢棄廢棄並將自php 5.4.0起移除,但是了解魔術引號以後,在閱讀一些php 5.3.0之前原始碼碰到了魔術引號閱讀起來也很順暢。
什麼是魔術引號:
魔術引號是程式自動將進入php指令碼的資料進行轉意的過程。當開啟時,所有的 '(單引號),"(雙引號),\(反斜線)和 null 字元都會被自動加上乙個反斜線進行轉義。和 addslashes() 函式的作用完全相同。
魔術引號指令:
魔術引號作用:
當初引入魔術引號是安全方面的考慮,阻止sql注入,它能幫助php新手在不知不覺中寫成相對更安全的**,不過在今天,程式設計師已經能很好的意識到了這個安全問題,並最終使用資料庫轉移機制或者 prepared 語句來取代魔術引號功能。
魔術引號缺陷:
可移植性 :程式設計時認為其開啟或並閉都會影響到移植性。可以用 get_magic_quotes_gpc() 來檢查是否開啟,並據此程式設計。
效能:由於並不是每一段被轉義的資料都要插入資料庫的,如果所有進入 php 的資料都被轉義的話,那麼會對程式的執行效率產生一定的影響。在執行時呼叫轉義函式(如 addslashes())更有效率。 儘管 php.ini-dist 預設開啟了這個選項,但是 php.ini-recommended 預設卻關閉了它,主要是出於效能的考慮。
不便:由於不是所有資料都需要轉義,在不需要轉義的地方看到轉義的資料就很煩。比如說通過表單傳送郵件,結果看到一大堆的 \'。針對這個問題,可以使用 stripslashes() 函式處理。
開關魔術引號:
magic_quotes_gpc 是不能通過ini_set()的來設定的,設定magic_quotes_gpc有三種方法。
1、修改php配置檔案php.ini。這種方法需要對伺服器有管理許可權才能修改,如果只是虛擬空間就只能使用後面兩種方法。
; magic quotes; magic quotes
for incoming get/post/cookie data.magic_quotes_gpc =off
; magic quotes
for runtime-generated data, e.g. data from sql, from exec(), etc.
magic_quotes_runtime =off
use sybase-style magic quotes (escape ' with ''instead of \').
magic_quotes_sybase = off
2、在htaccess中設定。只有伺服器支援htaccess的情況下這種才能使用,
php_flag magic_quotes_gpc off3、**中遮蔽。這種方法的移植性較強,但是效率最低,所以在有伺服器管理許可權的時候通過修改配置文章的方式關閉magic_quotes_gpc是最好的。
例項**:
<?phpif (get_magic_quotes_gpc
())
$_post = array_map('stripslashes_deep', $_post
);
$_get = array_map('stripslashes_deep', $_get
);
$_cookie = array_map('stripslashes_deep', $_cookie
);
$_request = array_map('stripslashes_deep', $_request);}
?>
總結:當初是為了阻止sql注入的需要引入了魔法引號,對於開發者有一定好的好友,但在使用的時候也帶來很多的不便,現在有了更多更好的方案來替代,所以如果還是在php 5.3.0或php 5.3.0之前的版本做開發應該盡量避免使用魔法引號,php 5.4.0以後已經移除了。
標籤: php, 魔術引號
乙個能思考,肯苦幹的人!!!
php魔術引號總結
在乙個專案中,魔術引號若是開啟的話,所有的反斜線 單引號 雙引號 null 字元都會被自動加上乙個反斜線進行轉義,這和 addslashes 作用完全相同。這裡主要講四個與之相關的函式 set magic quotes runtime magic quotes gpc addslashes stri...
PHP中的魔術引號
魔術引號 magic quote 是乙個自動將進入 php 指令碼的資料進行轉義的過程。最好在編碼時不要轉義而在執行時根據需要而轉義。當開啟時,所有的 單引號 雙引號 反斜線 和 null 字元都會被自動加上乙個反斜線進行轉義。這和 b addslashes b 作用完全相同。轉義魔術引號的函式 b...
PHP中的魔術引號
魔術引號 magic quote 是乙個自動將進入 php 指令碼的資料進行轉義的過程。什麼是魔術引號 當開啟時,所有的 單引號 雙引號 反斜線 都會被自動加上乙個反斜線進行轉義。這和addslashes 作用完全相同。三個魔術引號指令 1.magic quotes gpc 影響到 http 請求資...