php - साझा होस्टिंग पर जादू उद्धरण कैसे बंद करें?




magic-quotes-gpc (9)

मैं PHP के जादू उद्धरण को बंद करना चाहता हूं। मेरे पास php.ini तक पहुंच नहीं है।

जब मैंने php_flag magic_quotes_gpc off को मेरी .htaccess फ़ाइल में php_flag magic_quotes_gpc off करने का प्रयास किया, तो मुझे 500 आंतरिक सर्वर त्रुटि मिल गई। यह मेरी है। Htaccess फ़ाइल इस तरह दिखती है:

AddType x-mapp-php5 .php
php_flag magic_quotes_gpc off

तब मैंने ini_set('magic_quotes_gpc', 'O') का उपयोग करने का प्रयास किया, लेकिन इसका कोई प्रभाव नहीं पड़ा।

मैं जादू उद्धरण कैसे बंद करूँ?


  1. यदि आप AddType लाइन को हटाते हैं तो यह काम करता है? मुझे पूरा यकीन नहीं है कि यह जादू उद्धरण बंद करने के लिए प्रासंगिक क्यों है।

  2. यदि PHP mod_php के अंतर्गत नहीं चल रहा है, तो htaccess काम नहीं करेगा। क्या यह एक सीजीआई के रूप में काम करता है?

यह वास्तव में आपकी होस्टिंग कंपनी के लिए एक है।


======================== =============== मेरा समाधान ========= =================== (php5.ini पर अपने php.ini का नाम बदलें)

और शीर्ष (!) में, इन्हें जोड़ें:

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
extension=pdo.so
extension=pdo_mysql.so

फिर। htaccess में, इसे जोड़ें (शीर्ष में):

SetEnv PHPRC /home/your_path/to/public_html/php5.ini

पीएस चेंज /home/your_path/to/ (आप एक सामान्य .php फ़ाइल से <?php phpinfo(); ?> कमांड निष्पादित करके उस पथ को देख सकते हैं।)


जब आप स्थानीय php.ini फ़ाइल बनाते हैं तो यह "क्लास 'पीडीओ नहीं मिला" की समस्या को हल करेगा।

यदि आप htaccess फ़ाइल (पीट बेली द्वारा पहले से दिए गए कारणों के लिए) का उपयोग कर जादू उद्धरण को बंद नहीं कर सकते हैं:

  1. एक टेक्स्ट फ़ाइल बनाएं
  2. इसे 'php.ini' पर पुनर्नामित करें
  3. लाइनें जोड़ें

    magic_quotes_gpc = बंद
    magic_quotes_runtime = बंद
    magic_quotes_sybase = बंद
    विस्तार = pdo.so
    विस्तार = pdo_mysql.so

  4. इसे निर्देशिका / ies में सहेजें जिसमें आपकी स्क्रिप्ट निष्पादित हो रही हैं।

अपडेट करें: यदि आप नई php.ini फ़ाइल की केवल एक प्रतिलिपि रखना चाहते हैं तो इस पंक्ति को अपनी रूट में जोड़ें। Htaccess फ़ाइल:

SetEnv PHPRC /path/to/site/root/public_html/php.ini

जाहिर है आपको इनआई फ़ाइल को इस स्थान पर स्थानांतरित करने की आवश्यकता है, जो पहले से नहीं है।

उम्मीद है कि किसी को 2 घंटे बचाता है, यह सिर्फ मुझे ले गया है!


जबकि मैं यह नहीं कह सकता कि php_flag आपको 500 Internal Server Error क्यों दे रहा है, मैं यह इंगित करूंगा कि PHP मैनुअल में यह पता लगाने का एक उदाहरण है कि क्या जादू उद्धरण चालू है और रनटाइम पर सुपरग्लोबल्स से इसे अलग कर रहा है। पोस्ट किए गए अन्य लोगों के विपरीत, यह एक पुनरावर्ती है और सही ढंग से सरणी से उद्धरण पट्टी करेगा:

अद्यतन: मैंने आज देखा कि PHP मैनुअल पर निम्न कोड का एक नया संस्करण है जो इसके बजाय सुपर-ग्लोबल्स के संदर्भों का उपयोग करता है।

पुराना संस्करण:

<?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);
}
?>

नया संस्करण:

<?php
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
?>

मुझे पता है कि मुझे इसका उत्तर देने में देर हो चुकी है, लेकिन मैंने अधिकांश उत्तरों को पढ़ा और कई महान थे, केवल डीजेएन ने वास्तव में समझाया कि आपको यह 500 Internal Server Error क्यों मिल रही है।

जबकि उनकी व्याख्या 100% सही थी, यह एक आदर्श उदाहरण है कि आपको हमेशा उन्हें <IfModule> में क्यों लपेटना चाहिए। हालांकि यह आपकी .htaccess को आपके .htaccess में सेट करने में सक्षम नहीं होने की वास्तविक समस्या को ठीक नहीं करेगा, यह कम से कम 500 त्रुटि को रोक देगा

<IfModule mod_php5.c>
    # put all of your php_flags here, for example:
    php_flag magic_quotes_gpc off
</IfModule>

या पुराने संस्करणों के लिए यह <IfModule mod_php.c> आदि होगा।

मैं ऐसी किसी भी 500 त्रुटियों से बचने के लिए हमेशा ऐसा करने की आदत बनाने की कोशिश करता हूं। इसके बाद, बस पीटर बेली ने जो कहा वह लागू करें।


यदि आप PHP 5.3+ चला रहे हैं तो यह चाल करेगा, इसे अपने पृष्ठ के शीर्ष पर रखें:

if (get_magic_quotes_gpc() === 1)
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

हैंडल कुंजी, मान और बहु-आयामी सरणी।


यदि आपका होस्टिंग प्रदाता cpanel का उपयोग कर रहा है, तो आप php.ini को अपनी वेब निर्देशिका में कॉपी करने और magic_quotes_gpc = off के साथ संपादित करने का प्रयास कर सकते हैं


विभिन्न होस्टिंग प्रदाताओं के पास ऐसा करने के लिए अलग-अलग प्रक्रियाएं होती हैं, इसलिए मैं उनके मंचों पर पूछता हूं या एक समर्थन अनुरोध दर्ज करता हूं।

यदि आप उन्हें बंद नहीं कर सकते हैं, तो आप हमेशा इस तरह कुछ उपयोग कर सकते हैं जो कि जादू उद्धरण चालू या बंद होने के बावजूद इनपुट से बच जाएगा:

//using mysqli

public function escapeString($stringToBeEscaped) {

    return $this->getConnection()->real_escape_string(stripslashes($stringToBeEscaped));
}

$_SERVER बारे में कैसे?

if (get_magic_quotes_gpc() === 1) {

    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true); 
    $_SERVER = json_decode( stripslashes(json_encode($_SERVER,JSON_HEX_APOS)), true); 
}




magic-quotes-gpc