【问题标题】:php globals in opencartopencart中的php全局变量
【发布时间】:2014-08-27 06:03:39
【问题描述】:

我正在尝试通过研究 opencart 源代码来学习将 php 用于实际应用程序,但我卡在了一个点

// Register Globals
if (ini_get('register_globals')) {
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');

session_set_cookie_params(0, '/');
session_start();

$globals = array($_REQUEST, $_SESSION, $_SERVER, $_FILES);

foreach ($globals as $global) {
    foreach(array_keys($global) as $key) {
        unset(${$key}); 
    }
} 
}
  1. 据我了解,我们正在尝试取消设置所有会话变量,但如果会话没有提前启动,为什么我们需要取消设置?
  2. unset(${$key}) 究竟做了什么?

  3. 为什么 opencart 使用 myisam 引擎?

【问题讨论】:

  • unset(${$key}) 取消设置具有变量$key 所拥有的名称的变量。例如,想象$global$_SESSION;那么从array_keys() 返回的一个元素可能是"USERNAME"(例如),这意味着unset(${$key}) 将取消设置变量$USERNAME
  • 我明白了你的意思,但是如果存在同名的变量是一种威胁吗?
  • 我的意思是一个只是一个变量,另一个是一个数组的键。它只是错误输入的威胁还是其他什么?
  • register_globals 设置了吗?因为在这种情况下,请查看:stackoverflow.com/questions/3593210/…

标签: php opencart


【解决方案1】:

1) 清除变量,在$_SESSION$_REQUEST$_SERVER$_FILES 变量中有键,如果它们为空,则将跳过该变量的内部循环迭代(不需要检查它是否已设置,因为它将始终默认设置)。
例如。如果有变量$foo 并且设置了$_SESSION['foo'],那么它将取消设置$foo,而不是$_SESSION['foo']

2) 它是可变变量。如果$key = 'foo',则unset(${$key}) 将取消设置$foo 变量。

3) 询问 opencart 开发人员原因。

【讨论】:

    【解决方案2】:

    Justinas 是正确的,您正在查看的代码部分基本上是删除了一些全局变量以强制 OpenCart 开发人员使用可用的内部方法($this->request->server[] 和 $this- >会话例如)。 OC 开发人员这样做是为了确保在整个商店代码中始终如一地处理数据。

    我相信选择 myisam 是为了向后兼容。在开发 OC 1.x 时,innodb 并没有像现在这样被广泛支持。他们目前正在开发 OC 2,我认为这将是一个选择。有相当多的代码块可以改变数据库格式并应用额外的索引来提高性能。

    OpenCart 实际上是一个非常好的平台,可以帮助您学习 MVC 原理,但是当您提到您正在学习 PHP 时,我也会寻找一些通用的 PHP 代码。取决于你在做什么,MVC 很可能是矫枉过正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2011-04-06
      • 1970-01-01
      • 2013-09-19
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多