什麼是魔術引號:
魔術引號是程式自動將進入PHP腳本的資料轉義的過程。當開啟時,所有的'(單引號),"(雙引號),\(反斜線)和NULL 字元都會被自動加上一個反斜線進行轉義。和addslashes() 函數的作用完全相同。
魔術引號指令:
magic_quotes_gpc 影響到HTTP 請求資料(GET,POST 和COOKIE)。不能在執行時改變。在PHP 中預設值為on。參見get_magic_quotes_gpc()。
magic_quotes_runtime 如果打開的話,大部份從外部來源取得資料並傳回的函數,包括從資料庫和文字文件,所傳回的資料都會被反斜線轉義。該選項可在運行的時改變,在PHP 中的預設值為off。見set_magic_quotes_runtime() 和 get_magic_quotes_runtime()。
magic_quotes_sybase 如果開啟的話,將會使用單引號對單引號進行轉義而非反引號斜線。此選項會完全覆蓋magic_quotes_gpc。如果同時開啟兩個選項的話,單引號將會被轉義成''。而雙引號、反斜線和NULL 字元將不會進行轉義。 如何取得其值參見ini_get()。
魔術引號作用:
#當初引入魔術引號是安全性的考慮,阻止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
php_flag magic_quotes_gpc Off
<?php if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_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中文網其他相關文章!