PHP关闭魔术引号的三种方法(倡议PHP彻底关闭魔术引号这个可恶的东西)


PHP魔术引号是在编程过程中必须注意的,否则会带来灾难性的麻烦,汗,今天就有客户找我了,我排查错误半天,发现是PHP魔术引号在作怪!真是很郁闷的一件事,我就纳闷儿了,PHP默认魔术引号是关闭的,那个破网管闲的没事,给打开了!后来,偶找到他,他还给偶谈一些什么SQL注入的大道理,唉,真是无语!!
PHP的魔术引号给程序编写带来了一丁点方便,但却严重影响的程序的可移植性,在开启magic_quotes_gpc的环境下写的程序到没开启的环境下就有可能出现错误。所以通常情况下,我们会关闭magic_quotes_gpc以避免它带来的问题。
手册里介绍了三种方法,在些整理一下:
1 修改PHP配置文件php.ini
这种方法只适于自己有权管理服务器的情况下,如果用的虚拟空间,那就只能采用后两条方法。
在PHP配置文件php.ini中将magic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase全部设为off。如下所示:
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ‘ with ” instead of ’).
magic_quotes_sybase = Off
2 利用.htaccess文件
该方法只在服务器支持htaccess的情况下,现在的服务器一般都会支持的
在程序目录下.htaccess文件中增加下面一句:
php_flag magic_quotes_gpc Off
3 在代码中屏蔽
该方法是移植性最强的,不用考虑服务器的配置,只要支持PHP就可以使用。
在所有PHP文件开始处增加下面代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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);
}
?>

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com
本文链接地址: PHP关闭魔术引号的三种方法(倡议PHP彻底关闭魔术引号这个可恶的东西) http://www.chhua.com/web-note551
本文来源于WEB开发笔记 http://www.chhua.com , 原文地址: http://www.chhua.com/web-note551

你可能感兴趣的:(PHP)