本機測試沒事,正式環境才會出錯,所以去 phpinfo() 看看,果然,正式機的 magic_quotes_gpc 被打開了。
但這是共用的環境,不能隨便修改 php.ini,就想到用 ini_set 在執行時做修改,但沒效,後來想想也對,當程式進到 php 頁面時,$_GET 等變數都已經就定位了,所以設了也沒用。
研究了一下,PHP 建議在取用 $_GET 前做復原的動作。
<?php
// 如果 magic_quotes_gpc 打開了
if (get_magic_quotes_gpc()) {
// 彙整所有受到影響的變數,且一定要用「&」by reference
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
// 清掉受 magic_quotes_gpc 影響的值
unset($process[$key][$k]);
if (is_array($v)) {
// 這一段看不懂
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
// 復原受 magic_quotes_gpc 影響的值
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>
沒有留言:
張貼留言