【发布时间】:2017-11-20 01:26:25
【问题描述】:
所以我现在要拔头发了:/
我在 Windows Server 2012 R2 Datacenter Edition 上使用 PHP 7.1.11 设置了一个 IIS 网络服务器,当我加载一个页面时它会引发解析错误:
Parse error: syntax error, unexpected '[' in functions.php on line 138
现在出错的实际代码如下
$hash = password_hash($nieuwWachtwoord,PASSWORD_DEFAULT, ["cost" => 13]);
当我把它改成
$hash = password_hash($nieuwWachtwoord,PASSWORD_DEFAULT,array("cost" => 13));
它执行代码没有任何问题。
但是当我调用另一个运行以下代码的函数时
Database::fetch_assoc("SQL-STRING", array($id))[0]['cdate'];
它还会引发解析错误。令人沮丧的是,这不应该发生,因为在 php7.1 中应该可以在旅途中声明这样的数组(并且在运行 ubuntu 和 apache2 的 Linux 机器上的相同代码可以正常工作)
我“假设”返回数组的最后一种情况最多应该抛出未定义的索引错误而不是解析错误。
有人知道是什么原因吗?
提前致谢!
【问题讨论】:
-
您有多确定这是在运行 PHP 7?您已经通过
phpinfo()确认了这一点?Database::fetch_assoc代码的解析错误消息是什么? -
我有,它运行 PHP 7.1.11 x64。这也是我检查的第一件事,因为我认为这是 php 5.3 的东西。
Database::fetch_assoc代码的解析错误完全相同。 -
不过,我很好奇您如何检查的。服务器上可能有多个版本的 PHP。如果将
password_hash()行替换为phpinfo(),输出显示PHP 7?有问题的行之前/之后的那几行是什么意思? -
尝试在 php 5.6 上运行
-
嗯,这是一个很好的观点。我在显示为 7.1.11 的网站 (test.php) 的根目录中检查了它。但是当我在实际加载functions.php文件的脚本中尝试它时。它高兴地告诉我我正在运行 PHP 5.3 :/ 。非常感谢这个建议。现在对于新的奇怪的事情,为什么当我进入更深的目录时我的 PHP 版本切换到 5.3(test.php 在根目录中)functions.php 是 1 个文件夹更深..