【问题标题】:PHP 5.4-specific ISSET query regarding $_GET. $_POST Superglobals关于 $_GET 的 PHP 5.4 特定 ISSET 查询。 $_POST 超级全局变量
【发布时间】:2014-08-18 16:49:26
【问题描述】:

我必须将关键任务(不是全部吗?)Ubuntu 服务器从 PHP 5.3 升级到 5.4,并且对除了 1 个可能的问题之外的所有问题感到满意。 我们的 PHP 脚本包含大约 1200 个 ISSET() 引用,几乎所有这些引用都检查 $_GET 或 $_POST 变量的状态,它们的名称都包含字符串,而不是数字。

我知道在使用 ISSET($var['somestringvalue']) 时 5.4 会返回 false 的 (5.3 v 5.4) 区别,我的问题是是否会应用这种不需要的行为到我们的字符串值 $_POST 和 $_GET 变量?

我会建立一个快速的 5.4 测试服务器,但我们使用了如此多的扩展和调整,以至于说起来容易做起来难。所以我想我先在这里试试运气。提前致谢。

【问题讨论】:

  • “但我们使用了如此多的扩展和调整”,这听起来更像是更多设置测试服务器的理由。
  • 我同意,但是我的测试服务器被借用作为精确的镜像备份,以最大限度地减少停机时间!

标签: php isset superglobals


【解决方案1】:

这不是“不需要的行为”,它实际上很有用。只有在对字符串调用 isset() 时,行为才会改变。

$string = 'My string'; // length = 9, character indexes 0 to 8
var_dump(isset($string[5])); // makes sense -> checks whether there's a character on the 5th position (true)
var_dump(isset($string[10])); // makes sense -> checks whether there's a character on the 10th position (false)
var_dump(isset($string['foo'])); // doesn't make sense -> checks whether there's a character on the "foo" position (false)

由于 $_GET 和 $_POST 始终是关联数组,因此这种新行为无论如何都不会影响您。欲了解更多信息,请查看http://php.net/manual/en/function.isset.php的手册

PS:您应该考虑使用开发服务器来测试这样的东西,而不会给您的用户/客户带来问题!

【讨论】:

  • 非常感谢 - 我应该对我的“不受欢迎的行为”评论进行限定 - 我的意思是在我需要做的事情的背景下不受欢迎。
猜你喜欢
  • 2019-11-30
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多