2012-06-20

執行時停用 magic_quotes_gpc?

今天終於遇到這個問題,用 CKEditor 上傳圖片後,到前台看不到圖片,只看到一些亂亂的字元,先確認資料是否有進到資料庫,發現資料裡的 html 變得一團亂,當下直覺應該是這個 Magic Quotes 搞的鬼。

本機測試沒事,正式環境才會出錯,所以去 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);
}
?>

沒有留言:

張貼留言