亚马逊EC2服务器上的PHP语法错误(正在开发中)


PHP Syntax Error on Amazon EC2 Server (Works In Development)

我有以下代码行

foreach ($_SESSION['ini']->infrastructure()['buildings'] as $key => $value)

变量$_SESSION['ini']保存一个对象,它读取各种。ini文件并在内存中保存它们的值。然后,当调用它的函数时,它以数组的形式返回独立的.ini变量集。Infrastructure()就是这样一个函数,它返回一个矩阵。我只想把['buildings']数组从矩阵中移除。循环在我的开发服务器上运行良好。但是,当我将代码上传到Amazon EC2服务器时,服务器抛出以下错误:

Parse error: syntax error, unexpected '['

我假设这是对尝试直接从函数的返回值中获取['buildings']数组的实践的引用,实际上,以下代码在EC2服务器上工作得很好:

$placeholder = $_SESSION['ini']->infrastructure();
foreach ($placeholder['buildings'] as $key => $value)

谁能解释一下是什么导致了开发和生产之间语法的变化,以及我如何修复EC2服务器以与开发代码一起工作?我不喜欢用'$placeholder'方法重新编码所有内容,因为它效率较低,而且因为我在整个项目中经常使用这种语法。

似乎你的EC2上的PHP版本小于5.4。Function array dereferencing只允许在5.4版本之后使用。

函数数组解引用…

infrastructure()['buildings']

既然你知道如何修复这个错误,我就不写了。这就是为什么代码不能在EC2上工作的版本

这个问题最有可能是:

$_SESSION['ini']->infrastructure()['buildings']

直到PHP 5.4才增加对函数数组解引用的支持,因此您的EC2实例很可能运行的版本低于此版本。

见:http://php.net/manual/en/migration54.new-features.php

您可以通过将函数的结果存储在一个变量中来解决这个问题:

$var = $_SESSION['ini']->infrastracture();
foreach ($var['buildings'] as $key => $value)

或者你可以在EC2实例上升级PHP版本,如果你想继续使用语法。