尝试为 bcrypt 哈希算法指定成本基准时出现解析错误?

I get a parse error, when trying to specify cost benchmark for bcrypt hashing algorithm?

无法弄清楚为什么我的代码出现 parse/syntax 错误,它可以在我的本地主机服务器上运行,但是当我将它上传到我的虚拟主机时,出现语法错误:"unexpected '[' on line 3" .

我这里有贴-link:http://codepad.org/26K93MPG

这是我的代码:

<?php

$options = [
    'cost' => 9,
];

$unhashedPassword = 'testingtesting';
$hashedPassword = password_hash($unhashedPassword, PASSWORD_BCRYPT, $options);

echo $unhashedPassword . "<br>";
echo $hashedPassword;

?>

已修复! 以下是我修复它的方法,以及关于错误原因的简短解释:

首先,我的本地主机服务器的 PHP 版本是 5.6.4,生产服务器的 PHP 版本是 5.3.29。由于 password_hash() 函数是在 5.3.7 版本中首次引入的,因此显然它不起作用。

其次,我使用的数组语法只允许在 PHP 5.3 或更早版本中使用。但是旧的语法也没有使它工作,但那是因为 password_hash() 函数当时也没有在 PHP 中实现。

解决这两个问题:

1) 转到 https://github.com/ircmaxell/password_compat/blob/master/lib/password.php

2) 将此库文件放入您的文件夹,并在您的登录程序中包含password.php。

3) 把数组的语法改成这样,漂亮又整洁:

<?php
include("password_hash_compatibility.php");

$unhashedPassword = 'testingtesting';
$hashedPassword = password_hash($unhashedPassword, PASSWORD_BCRYPT, array("cost" => 9));

echo $unhashedPassword . "<br>";
echo $hashedPassword;

?>

您的生产服务器是 运行 PHP 5.3 或更早版本,因此不提供数组 shorthand 语法,后者是 introduced in PHP 5.4。只需使用 "old" 数组语法来实现向后兼容性:

$options = array(
    'cost' => 9,
);

这就是为什么您应该始终确保您的开发环境尽可能与您的生产环境相匹配。