[SQL與PHP] 關閉PHP魔術引號(Magic Quote)



[SQL與PHP] 關閉PHP魔術引號(Magic Quote)

PHP的魔術引號給程序編寫帶來了一丁點方便,但卻嚴重影響的程序的可移植性,在開啟magic_quotes_gpc的環境下寫的程序到沒開啟的環境下就有可能出現錯誤。所以通常情況下,我們會關閉magic_quotes_gpc以避免它帶來的問題。

手冊裡介紹了三種方法,在些整理一下:

1 修改PHP配置文件php.ini

這種方法只適於自己有權管理服務器的情況下,如果用的虛擬空間,那就只能採用後兩條方法。

在PHP配置文件php.ini中將magic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase全部設為off。如下所示:

; 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的情況下,現在的服務器一般都會支持的

在程序目錄下.htaccess文件中增加下面一句:

php_flag magic_quotes_gpc Off

3 在代碼中屏蔽

該方法是移植性最強的,不用考慮服務器的配置,只要支持PHP就可以使用。

在所有PHP文件開始處增加下面代碼
  1. <?php
  2. if (get_magic_quotes_gpc()) {
  3.     function stripslashes_deep($value)
  4.     {
  5.         $value = is_array($value) ?
  6.                     array_map('stripslashes_deep', $value) :
  7.                     stripslashes($value);

  8.         return $value;
  9.     }

  10.     $_POST = array_map('stripslashes_deep', $_POST);
  11.     $_GET = array_map('stripslashes_deep', $_GET);
  12.     $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  13.     $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
  14. }
  15. ?>
複製代碼