복붙노트

공유 호스팅에서 마술 따옴표를 끄는 방법?

PHP

공유 호스팅에서 마술 따옴표를 끄는 방법?

나는 PHP 마술 따옴표를 끄고 싶다. 나는 php.ini에 접근 할 수 없다.

내 .htaccess 파일에 php_flag magic_quotes_gpc를 추가하려고하면 500 개의 내부 서버 오류가 발생합니다. 이것은 .htaccess 파일의 모습입니다.

AddType x-mapp-php5 .php
php_flag magic_quotes_gpc off

그런 다음 ini_set ( 'magic_quotes_gpc', 'O')을 사용하려고 시도했지만 효과가 없습니다.

마법 따옴표를 끄려면 어떻게합니까?

해결법

  1. ==============================

    1.매뉴얼에 따라 공유 호스트에 커스텀 php.ini를 설치할 수 있습니다. mod_php가 사용되지 않고 php_value 지시자가 에러를 발생시킵니다. suexec / FastCGI 설정의 경우 어떤 경우에도 webspace 당 php.ini를 갖는 것이 일반적입니다.

    매뉴얼에 따라 공유 호스트에 커스텀 php.ini를 설치할 수 있습니다. mod_php가 사용되지 않고 php_value 지시자가 에러를 발생시킵니다. suexec / FastCGI 설정의 경우 어떤 경우에도 webspace 당 php.ini를 갖는 것이 일반적입니다.

    --

    o (대문자 o)가 ini 플래그를 설정하는 데 유효한 값이라고 생각하지 않습니다. true / false, 1/0, 또는 "on"/ "off"값을 사용해야합니다.

    ini_set( 'magic_quotes_gpc', 0 );   // doesn't work
    

    편집하다

    ini 설정 목록을 확인한 후, magic_quotes_gpc가 PHP_INI_PERDIR 설정 (4.2.3 이후)이라는 것을 알 수 있습니다. 즉, ini_set ()을 사용하여 변경할 수 없습니다 (PHP_INI_ALL 설정 만 ini_set ()으로 변경할 수 있음).

    이것이 의미하는 바는 .htaccess 파일을 사용하여 이것을 수행해야한다는 것입니다 - 또는 - 마법 인용 부호의 효과를 되돌리기위한 스크립트를 구현하십시오. 이 같은

    if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) ) )
    {
        $_POST = array_map( 'stripslashes', $_POST );
        $_GET = array_map( 'stripslashes', $_GET );
        $_COOKIE = array_map( 'stripslashes', $_COOKIE );
    }
    
  2. ==============================

    2.php_flag가 500 개의 내부 서버 오류를 제공하는 이유는 말할 수 없지만, PHP 매뉴얼에는 마법 인용 부호가 켜져 있는지 여부와 런타임시 수퍼 전역 변수를 제거하는 예제가 있습니다. 게시 된 다른 것들과 달리 이것은 재귀 적이며 배열로부터 따옴표를 올바르게 제거합니다 :

    php_flag가 500 개의 내부 서버 오류를 제공하는 이유는 말할 수 없지만, 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);
    }
    ?>
    
  3. ==============================

    3.이렇게하면 로컬 php.ini 파일을 만들 때 "Class 'PDO가 발견되지 않는 문제를 해결할 수 있습니다.

    이렇게하면 로컬 php.ini 파일을 만들 때 "Class 'PDO가 발견되지 않는 문제를 해결할 수 있습니다.

    htaccess 파일을 사용하여 마법 인용 부호를 끌 수없는 경우 (Pete Bailey가 이미 제시 한 이유로) :

    업데이트 : 새로운 php.ini 파일의 사본 하나만 갖고 싶다면이 행을 루트 .htaccess 파일에 추가하십시오 :

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

    당연히 ini 파일을이 위치로 옮길 필요가 있습니다.

    그것이 나를 데려 간다 2 시간을 누군가 구하는 희망!

  4. ==============================

    4..htaccess 파일 안의 php_flag와 php_value는 기술적으로는 올바르지 만 PHP는 Apache 모듈로만 설치됩니다. 공유 호스트에서는 거의 그런 설정을 찾을 수 없습니다. PHP는 CGI 대신 보안과 관련된 이유 (서버 이웃을 파일에서 보호)와 phpsuexec이 apache 사용자 대신 '사용자'로 스크립트를 실행하는 방식으로 실행됩니다.

    .htaccess 파일 안의 php_flag와 php_value는 기술적으로는 올바르지 만 PHP는 Apache 모듈로만 설치됩니다. 공유 호스트에서는 거의 그런 설정을 찾을 수 없습니다. PHP는 CGI 대신 보안과 관련된 이유 (서버 이웃을 파일에서 보호)와 phpsuexec이 apache 사용자 대신 '사용자'로 스크립트를 실행하는 방식으로 실행됩니다.

    아파치는 올바른 서버 오류를 제공합니다. PHP 모듈이로드되지 않는 한 php_flag의 의미를 알지 못합니다. CGI 바이너리는 아파치에게 외부 프로그램 대신 사용되며, 아파치에서 설정할 수 없다.

    이제 좋은 소식은 디렉토리 별 설정을 'php.ini'라는 파일을 설정하고 시스템의 기본 php.ini와 동일한 구문을 사용하여 지침을 설정하는 것입니다. PHP 매뉴얼은 설정 가능한 모든 지시어를 나열합니다 : PHP_INI_PERDIR 또는 PHP_INI_ALL로 표시된 것을 설정할 수 있습니다. 반면 시스템 관리자 만이 서버 전체 php.ini에서 PHP_INI_SYSTEM으로 표시된 것을 설정할 수 있습니다.

    php.ini 지시어는 하위 디렉토리에 상속되지 않으므로, php.ini 지시어를 직접 주어야합니다.

  5. ==============================

    5.============ =============== 내 해결책 ========================== (php.ini 파일의 이름을 php5.ini로 변경하십시오)

    ============ =============== 내 해결책 ========================== (php.ini 파일의 이름을 php5.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 파일에서 명령을 실행하여 해당 경로를 볼 수 있습니다).

  6. ==============================

    6.PHP 5.3 이상을 실행중인 경우 트릭을 수행하고 페이지의 맨 위에 배치하십시오.

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

    키, 값 및 다차원 배열을 처리합니다.

  7. ==============================

    7.cpanel을 사용하는 호스팅 제공 업체 인 경우, 당신은 당신의 웹 디렉토리에 php.ini를 복사 해 볼 수 있습니다. magic_quotes_gpc = off로 편집하십시오.

    cpanel을 사용하는 호스팅 제공 업체 인 경우, 당신은 당신의 웹 디렉토리에 php.ini를 복사 해 볼 수 있습니다. magic_quotes_gpc = off로 편집하십시오.

  8. ==============================

    8.나는이 답변에 늦었지만 대부분의 답변을 읽었으며 많은 사람들이 훌륭했지만 djn 만 실제로이 500 내부 서버 오류가 발생하는 이유를 설명했습니다.

    나는이 답변에 늦었지만 대부분의 답변을 읽었으며 많은 사람들이 훌륭했지만 djn 만 실제로이 500 내부 서버 오류가 발생하는 이유를 설명했습니다.

    그의 설명이 100 % 정확했지만, 이것이 왜 에 항상 포장해야하는지에 대한 완벽한 예입니다. 이렇게하면 .htaccess에서 플래그를 설정할 수없는 실제 문제가 해결되지는 않지만 적어도 500 오류를 방지 할 수 있습니다.

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

    또는 이전 버전의 경우 등입니다.

    나는 항상 그런 짓을하지 않도록 습관을 만들려고 그런 500 오류를 피하십시오. 그 후 베드로 베일리가 한 말을 적용하십시오.

  9. ==============================

    9.다른 호스팅 제공 업체가이 작업을 수행하는 절차가 다르므로 해당 포럼에서 요청하거나 지원 요청을 제출합니다.

    다른 호스팅 제공 업체가이 작업을 수행하는 절차가 다르므로 해당 포럼에서 요청하거나 지원 요청을 제출합니다.

    만약 당신이 그들을 끌 수 없다면, 당신은 항상 마술 따옴표가 켜져 있는지 꺼져 있는지에 관계없이 입력을 피할 수있는 이와 같은 것을 사용할 수 있습니다 :

    //using mysqli
    
    public function escapeString($stringToBeEscaped) {
    
        return $this->getConnection()->real_escape_string(stripslashes($stringToBeEscaped));
    }
    
  10. ==============================

    10.이것은 귀하의 호스팅 회사를위한 것입니다.

    이것은 귀하의 호스팅 회사를위한 것입니다.

  11. ==============================

    11.BaileyP의 대답은 이미 꽤 좋았지 만, 대신이 조건을 사용합니다.

    BaileyP의 대답은 이미 꽤 좋았지 만, 대신이 조건을 사용합니다.

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() === 1){
      $_POST = array_map( 'stripslashes', $_POST );
      $_GET = array_map( 'stripslashes', $_GET );
      $_COOKIE = array_map( 'stripslashes', $_COOKIE );
    }
    

    그것은 더 방어 적입니다.

  12. ==============================

    12.$ _SERVER는 어떨까요?

    $ _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); 
    }
    
  13. ==============================

    13.당신이 그것을 끌 수 없다면, 여기 제가 보통하는 일이 있습니다 :

    당신이 그것을 끌 수 없다면, 여기 제가 보통하는 일이 있습니다 :

    get_magic_quotes_gpc() ? $_POST['username'] : mysql_real_escape_string($_POST['username']);
    

    적절한 형식으로 데이터베이스에 배치됩니다.

  14. from https://stackoverflow.com/questions/517008/how-to-turn-off-magic-quotes-on-shared-hosting by cc-by-sa and MIT license