【问题标题】:Dynamic PHP object access differs on local and server本地和服务器上的动态 PHP 对象访问不同
【发布时间】:2019-04-12 10:22:03
【问题描述】:

在本地 XAMPP 开发环境中,我可以通过调用以下方法访问 PHP 中对象的属性: $xmltemplates->$_POST['xmlmap']->sheet;

但在实时服务器上,我必须将 POST 变量放入字符串中才能正常工作:

$gehmiraufdiekeks = $_POST['xmlmap']; $xmltemplates->$gehmiraufdiekeks->sheet;

我需要修复所有代码还是服务器配置问题?

更新: 我希望 XAMPP 测试环境至少是 PHP 7。所以我只检查了服务器的 PHP 版本是 7。但是当我仔细检查两个 PHP Infos 时,我的本地 PHP 版本是 5.6。哦!所以任何有这种问题的人:请将您的代码更新到 PHP 7。;)

【问题讨论】:

  • 不同的服务器配置可能是什么?不同的php版本
  • 谢谢,就是这样!
  • 您的更新应该作为答案发布,而不是添加到问题中。您可以回答自己的问题。很明显,解决方案不应该是原始问题描述的一部分。另外,如果您添加答案,其他认为有用的人可以对其进行投票,因此添加它符合您的兴趣

标签: php json post


【解决方案1】:

两件事:

  1. 生产服务器已配置(或应该)隐藏错误消息。这就是为什么你一无所获。您需要检查服务器日志或启用完整的错误报告。

  2. 我知道您指的是在不使用大括号的情况下调用变量属性,如:

    $key = 'bar';
    var_dump($foo->$bar);
    

    ...而不是:

    var_dump($foo->{$bar});
    

    PHP/7.0 迁移指南的Changes to the handling of indirect variables, properties, and methods 部分对此进行了说明(重点是我的):

    现在将严格按照从左到右的顺序对变量、属性和方法的间接访问进行评估,而不是之前的特殊情况组合。
    [...]
    代码必须重写使用旧的从右到左评估顺序的评估顺序,以显式使用带有花括号的评估顺序(请参阅上面的中间列)。这将使代码既向前兼容 PHP 7.x,又向后兼容 PHP 5.x。

【讨论】:

    【解决方案2】:

    其实这个和PHP版本有关。他们在 PHP 7 中对此进行了更改,因此没有人可以使用通过 POST 表单发送的已损坏、未转义的字符串来弄乱您的脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多