[关闭]
@Chiang 2020-04-12T18:13:48.000000Z 字数 2981 阅读 584

控制器基类构造函数

doitphp 2020-04


构造函数

  1. /**
  2. * 构造方法
  3. *
  4. * 用于初始化本类的运行环境,或对基本变量进行赋值
  5. *
  6. * @access public
  7. * @return boolean
  8. */
  9. public function __construct() {
  10. //时区设置,默认为中国(北京时区)
  11. date_default_timezone_set(Configure::get('application.defaultTimeZone'));
  12. //设置异常处理
  13. set_exception_handler(array($this, '_exception'));
  14. //关闭魔术变量,提高PHP运行效率
  15. if (get_magic_quotes_runtime()) {
  16. @set_magic_quotes_runtime(0);
  17. }
  18. //将全局变量进行魔术变量处理,过滤掉系统自动加上的'\'.
  19. if (get_magic_quotes_gpc()) {
  20. $_POST = ($_POST) ? $this->_stripSlashes($_POST) : array();
  21. $_GET = ($_GET) ? $this->_stripSlashes($_GET) : array();
  22. $_SESSION = ($_SESSION) ? $this->_stripSlashes($_SESSION) : array();
  23. $_COOKIE = ($_COOKIE) ? $this->_stripSlashes($_COOKIE) : array();
  24. }
  25. //实例化视图对象
  26. self::$_viewObject = $this->initView();
  27. //回调函数,实例化控制器(Controller)时,执行所要补充的程序
  28. $this->init();
  29. return true;
  30. }

get_magic_quotes_gpc() 你到底是做什么的?

在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime,当它打开时,

php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反

斜线。 当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时

就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini

文件中magic_quotes_runtime状态。 为了使自己的程序不管服务器是什么设置都能正常

执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理

,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。

magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的\'\"\加上反斜

线。可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用

addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反

斜线。这些字符是单引号(\')、双引号(\")、反斜线(\)与 NUL(NULL 字符)。

一般用法如下;
if(!get_magic_quotes_gpc())
{
addslashes($prot);
}

php 深入理解addslashes函数

php addslashes函数的作用是在预定义的字符前面加上反斜杠,这些预定义字符包括:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL

addslashes函数经常使用在向数据库插入数据时,比如有一个字符串

  1. $str="my name's wxp";

现在要将这个字符串插入到数据库表中,由于该字符串有单引号',这样很可能与mysql拼接字符串的单引号'冲突,导致SQL语句不正确,也就无法正常执行插入操作,此时我们需要使用addslashes函数处理这个字符串。如:

  1. $str="my name's wxp";
  2. echo addslashes($str);//输出my name\'s wxp

然后在拼接mysql字符串:

  1. $sql="insert into student(student_name)values('".addslashes($str)."')";
  2. mysql_query($sql);

此时字符串被插入到数据库,那么大家是否知道插入的字符串是带反斜杠还是不带反斜杠呢?恐怕很多人都会认为肯定是带反斜杠的字符串。其实这个答案是错误的,插入的字符串是没有带反斜杠。至于为什么插入的字符串在数据库中是没有加反斜杠,请大家继续看下面讲解。

如果字符串$str="my name's wxp"是使用POST和GET提交的数据,这个时候插入数据库中的数据是带反斜杠的,由此可知addslashes只是在POST和GET数据插入数据库时才会把反斜杠同时插入到数据库,其他情况下不会将反斜杠插入到数据库。

注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测

php addslashes 在预定义字符之前添加反斜杠

php addslashes 函数使用反斜线引用字符串

基本语法

  1. addslashes(string)

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。

预定义字符是:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL
  1. 一个使用 addslashes() 的例子是当你要往数据库中输入数据时。 例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。 强烈建议使用 DBMS 指定的转义函数 (比如 MySQL 是 mysqli_real_escape_string() ,PostgreSQL 是 pg_escape_string() ),但是如果你使用的 DBMS 没有一个转义函数,并且使用 \ 来转义特殊字符,你可以使用这个函数。 仅仅是为了获取插入数据库的数据,额外的 \ 并不会插入。 当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。
  2. PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。 不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes() ,因为这样会导致双层转义。 遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
  1. <?php
  2. $str = "Is your name O'reilly?" ;
  3. // 输出: Is your name O\'reilly?
  4. echo addslashes ( $str );
  5. ?>

参考资料:
get_magic_quotes_gpc() 你到底是做什么的?
php 深入理解addslashes函数
php addslashes 在预定义字符之前添加反斜杠

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注