공유 호스팅에서 마술 따옴표를 끄는 방법?
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.매뉴얼에 따라 공유 호스트에 커스텀 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.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.이렇게하면 로컬 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..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.============ =============== 내 해결책 ========================== (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 파일에서 php phpinfo ();?> 명령을 실행하여 해당 경로를 볼 수 있습니다).
-
==============================
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.cpanel을 사용하는 호스팅 제공 업체 인 경우, 당신은 당신의 웹 디렉토리에 php.ini를 복사 해 볼 수 있습니다. magic_quotes_gpc = off로 편집하십시오.
cpanel을 사용하는 호스팅 제공 업체 인 경우, 당신은 당신의 웹 디렉토리에 php.ini를 복사 해 볼 수 있습니다. magic_quotes_gpc = off로 편집하십시오.
-
==============================
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.다른 호스팅 제공 업체가이 작업을 수행하는 절차가 다르므로 해당 포럼에서 요청하거나 지원 요청을 제출합니다.
다른 호스팅 제공 업체가이 작업을 수행하는 절차가 다르므로 해당 포럼에서 요청하거나 지원 요청을 제출합니다.
만약 당신이 그들을 끌 수 없다면, 당신은 항상 마술 따옴표가 켜져 있는지 꺼져 있는지에 관계없이 입력을 피할 수있는 이와 같은 것을 사용할 수 있습니다 :
//using mysqli public function escapeString($stringToBeEscaped) { return $this->getConnection()->real_escape_string(stripslashes($stringToBeEscaped)); }
-
==============================
10.이것은 귀하의 호스팅 회사를위한 것입니다.
이것은 귀하의 호스팅 회사를위한 것입니다.
-
==============================
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.$ _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.당신이 그것을 끌 수 없다면, 여기 제가 보통하는 일이 있습니다 :
당신이 그것을 끌 수 없다면, 여기 제가 보통하는 일이 있습니다 :
get_magic_quotes_gpc() ? $_POST['username'] : mysql_real_escape_string($_POST['username']);
적절한 형식으로 데이터베이스에 배치됩니다.
from https://stackoverflow.com/questions/517008/how-to-turn-off-magic-quotes-on-shared-hosting by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP : 타임 스탬프에서 상대 날짜 / 시간 생성하기 (0) | 2018.09.13 |
---|---|
다차원 배열을 1 차원 배열로 바꾸기 (0) | 2018.09.13 |
"치명적인 오류 : PHP의 최대 기능 중첩 수준 '100'도달, 중단 중!" (0) | 2018.09.13 |
PHP : mysql_real_escape_string은 사용자 입력을 청소하기에 충분합니까? (0) | 2018.09.13 |
PHP에서 디렉토리와 그 전체 내용 (파일 + 하위 디렉토리)을 재귀 적으로 삭제하는 방법은 무엇입니까? (0) | 2018.09.13 |