實用代碼片段
@set_magic_quotes_runtime(0);
$MQG = get_magic_quotes_gpc();
if (!$MQG && $_POST) $_POST = daddslashes($_POST);
if (!$MQG && $_GET) $_GET = daddslashes($_GET);
function daddslashes($string) {
if (!is_array($string)) return addslashes($string);
foreach ($string as $key => $val) {
$string[$key] = daddslashes($val);
}
return $string;
}
magic_quotes_gpc vs magic_quotes_runtime
| magic_quotes_gpc | magic_quotes_runtime |
| 作用範圍 | GET/POST/COOKIE 請求數據 | 文件讀取、SQL 查詢結果、執行時產生數據 |
| 生效時間 | 腳本開始執行時 | 每次訪問運行時數據時 |
| 配置修改 | php.ini 或 .htaccess(無運行時函數) | set_magic_quotes_runtime() 可運行時切換 |
處理示例
$data1 = $_POST['aaa']; // 受 gpc 影響
$data2 = implode(file('1.txt')); // 受 runtime 影響
if (get_magic_quotes_gpc()) { /* 直接入庫 */ }
else { $data1 = addslashes($data1); }
if (get_magic_quotes_runtime()) { /* 直接入庫,讀出需 stripslashes */ }
else { $data2 = addslashes($data2); }
相關函數
get_magic_quotes_gpc():返回 0/1。
get_magic_quotes_runtime():返回 0/1。
set_magic_quotes_runtime(0|1):關閉/開啟 runtime。
- **無**
set_magic_quotes_gpc() 函數。
避坑指南
- 統一關閉兩者(PHP 5.4+ 預設關閉)。
- 入庫用預處理,輸出用
htmlspecialchars,徹底拋棄魔術引用思維。