php中什么是魔术引号-php教程

资源魔 35 0

甚么是魔术引号:

魔术引号是顺序主动将进入PHP剧本的数据进行回心的进程。当关上时,一切的 '(单引号),"(双引号),\(反斜线)以及 NULL 字符城市被主动加之一个反斜线进行本义。以及 addslashes() 函数的作用齐全相反。

魔术引号指令:

magic_quotes_gpc 影响到 HTTP 申请数据(GET,POST 以及 COOKIE)。不克不及正在运转时扭转。正在 PHP 中默许值为 on。 参见 get_magic_quotes_gpc()。

magic_quotes_runtime 假如关上的话,年夜部份从内部起源获得数据并前往的函数,包罗从数据库以及文本文件,所前往的数据城市被反斜线本义。该选项可正在运转的时扭转,正在 PHP 中的默许值为 off。 见 set_magic_quotes_runtime() 以及 get_magic_quotes_runtime()。

magic_quotes_sybase 假如关上的话,将会应用单引号对单引号进行本义而非反斜线。此选项会齐全笼罩 magic_quotes_gpc。假如同时关上两个选项的话,单引号将会被本义成 ''。而双引号、反斜线 以及 NULL 字符将没有会进行本义。 若何获得其值参见 ini_get()。

魔术引号作用:

当初引入魔术引号是平安方面的思考,阻止SQL注入,它能协助php老手正在人不知;鬼不觉中写成绝对更平安的代码,不外正在明天,顺序员曾经能很好的认识到了这个平安成绩,并终极应用数据库转移机制或许 prepared 语句来庖代魔术引号性能。

魔术引号缺点:

可移植性 :编程时以为其关上或并闭城市影响到移植性。能够用 get_magic_quotes_gpc() 来反省能否关上,并据此编程。

功能: 因为并非每一一段被本义的数据都要拔出数据库的,假如一切进入 PHP 的数据都被本义的话,那末会对顺序的执行效率孕育发生肯定的影响。正在运转时挪用本义函数(如 addslashes())更无效率。 虽然 php.ini-dist 默许关上了这个选项,然而 php.ini-reco妹妹ended 默许却封闭了它,次要是出于功能的思考。

方便: 因为没有是一切数据都需求本义,正在没有需求本义之处看到本义的数据就很烦。比方说经过表单发送邮件,后果看到一年夜堆的 \'。针对这个成绩,能够应用 stripslashes() 函数解决。

开关魔术引号:

magic_quotes_gpc 是不克不及经过ini_set()的来设置的,设置magic_quotes_gpc有三种办法。

一、修正PHP设置装备摆设文件php.ini。这类办法需求对效劳器有治理权限能力修正,假如只是虚构空间就只能应用前面两种办法。

; 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

二、正在htaccess中设置。只有效劳器支持htaccess的状况下这类能力应用,

php_flag magic_quotes_gpc Off

三、代码中屏蔽。这类办法的移植性较强,然而效率最低,以是正在有效劳器治理权限的时分经过修正设置装备摆设文章的形式封闭magic_quotes_gpc是最佳的。

实例代码:

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

总结:

当初是为了阻止SQL注入的需求引入了邪术引号,关于开发者有肯定好的摰友,但正在应用的时分也带来不少的方便,如今有了更多更好的计划来代替,以是假如仍是正在php 5.3.0或php 5.3.0以前的版本做开发应该只管即便防止应用邪术引号,php 5.4.0当前曾经移除了了。

以上就是php中甚么是魔术引号的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 魔术引号

抱歉,评论功能暂时关闭!