在项目中包含 Paragonie Halite 找不到变量和函数
Including Paragonie Halite in project doesn't find variables and functions
我已经在 Windows 上为 PHP 7 安装了 libsodium,我正在使用 PHPStorm 开发我的项目。我还从 Paragonie 安装了 Halite,如果 libsodium 扩展没有正确安装,它甚至无法安装。此外,IDE 找到使用的函数,当点击变量等时,它会打开 libsodium 的合适文件。
但不幸的是,在我的设置中出现以下错误:
Uncaught Error: Undefined constant 'Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' in C:\Server\nginx-1.11.1\html\mywebsite\vendor\paragonie\halite\src\KeyFactory.php:344
我的 index.php 文件如下所示:
<?php
require_once 'vendor/autoload.php';
spl_autoload_register(function ($class) {
require_once $class . '.php';
});
$router = new AltoRouter();
$router->setBasePath('/' . basename(__DIR__));
require_once 'config/routes.php';
$match = $router->match();
$GLOBALS['db'] = new \config\database(true, null);
try
{
if ($match) {
$routeController = new Modules\Core\RouteController($match);
echo $routeController->bootstrap();
}
}
catch (Exception $ex)
{
//@todo log every Exception
}
我还提交了带有 Jquery 的表单,这成功地执行了以下函数(没有找到 libsodium functions/variables):
public function hash($password)
{
$this->setEncryptionKey();
return Password::hash(
$password, // string
$this->encryption_key // \ParagonIE\Halite\Symmetric\EncryptionKey
);
}
public function check($stored_hash, $password)
{
try {
if (Password::verify(
$password, // string
$stored_hash,
$this->encryption_key
)) {
return true;
}
} catch (\ParagonIE\Halite\Alerts\InvalidMessage $ex) {
// Handle an invalid message here. This usually means tampered ciphertext.
throw new \Exception($ex);
}
}
我已经在扩展目录中安装了 php_libsodium.dll 并将 libsodium.dll 放在 php 服务器的目录中。只是为了尝试,我后来也把它放在 system32 目录和 Syswow64 目录中——两者都没有改变任何东西。
我刚刚使用 composer 安装了 paragonie 的岩盐库,但不幸的是,使用它比我想象的要难。我还尝试使用不含 Halite 的 libsodium 扩展,但这会导致类似的错误,无法找到所需的 类、常量和函数等。
我也尝试过更换自动加载器,但奇怪的是 IDE 发现一切都没有问题,但在浏览器中执行脚本却没有。
为了使用岩盐 2.x,您需要:
- Libsodium 1.0.9+(如果编译 .9 有问题,最好是 1.0.10)
- 针对 libsodium 1.0.9+ 编译的 PECL Libsodium 1.0.3+(最好是 1.0.6)。
验证是否已设置的简单方法是:
<?php
use \ParagonIE\Halite\Halite;
var_dump(Halite::isLibsodiumSetupCorrectly());
如果您想了解有关失败原因的更具体信息,只需 运行 改为:
<?php
use \ParagonIE\Halite\Halite;
// TRUE enables verbose output:
Halite::isLibsodiumSetupCorrectly(true);
很可能,您需要uninstall/reinstall PHP 扩展针对较新版本的共享库进行编译。
有一个 RFC under discussion for PHP 7.1 right now 如果被接受,将来会变得很轻松。 RFC 在几年后通过了; libsodium 将在 PHP 7.2.
我已经在 Windows 上为 PHP 7 安装了 libsodium,我正在使用 PHPStorm 开发我的项目。我还从 Paragonie 安装了 Halite,如果 libsodium 扩展没有正确安装,它甚至无法安装。此外,IDE 找到使用的函数,当点击变量等时,它会打开 libsodium 的合适文件。
但不幸的是,在我的设置中出现以下错误:
Uncaught Error: Undefined constant 'Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' in C:\Server\nginx-1.11.1\html\mywebsite\vendor\paragonie\halite\src\KeyFactory.php:344
我的 index.php 文件如下所示:
<?php
require_once 'vendor/autoload.php';
spl_autoload_register(function ($class) {
require_once $class . '.php';
});
$router = new AltoRouter();
$router->setBasePath('/' . basename(__DIR__));
require_once 'config/routes.php';
$match = $router->match();
$GLOBALS['db'] = new \config\database(true, null);
try
{
if ($match) {
$routeController = new Modules\Core\RouteController($match);
echo $routeController->bootstrap();
}
}
catch (Exception $ex)
{
//@todo log every Exception
}
我还提交了带有 Jquery 的表单,这成功地执行了以下函数(没有找到 libsodium functions/variables):
public function hash($password)
{
$this->setEncryptionKey();
return Password::hash(
$password, // string
$this->encryption_key // \ParagonIE\Halite\Symmetric\EncryptionKey
);
}
public function check($stored_hash, $password)
{
try {
if (Password::verify(
$password, // string
$stored_hash,
$this->encryption_key
)) {
return true;
}
} catch (\ParagonIE\Halite\Alerts\InvalidMessage $ex) {
// Handle an invalid message here. This usually means tampered ciphertext.
throw new \Exception($ex);
}
}
我已经在扩展目录中安装了 php_libsodium.dll 并将 libsodium.dll 放在 php 服务器的目录中。只是为了尝试,我后来也把它放在 system32 目录和 Syswow64 目录中——两者都没有改变任何东西。
我刚刚使用 composer 安装了 paragonie 的岩盐库,但不幸的是,使用它比我想象的要难。我还尝试使用不含 Halite 的 libsodium 扩展,但这会导致类似的错误,无法找到所需的 类、常量和函数等。
我也尝试过更换自动加载器,但奇怪的是 IDE 发现一切都没有问题,但在浏览器中执行脚本却没有。
为了使用岩盐 2.x,您需要:
- Libsodium 1.0.9+(如果编译 .9 有问题,最好是 1.0.10)
- 针对 libsodium 1.0.9+ 编译的 PECL Libsodium 1.0.3+(最好是 1.0.6)。
验证是否已设置的简单方法是:
<?php
use \ParagonIE\Halite\Halite;
var_dump(Halite::isLibsodiumSetupCorrectly());
如果您想了解有关失败原因的更具体信息,只需 运行 改为:
<?php
use \ParagonIE\Halite\Halite;
// TRUE enables verbose output:
Halite::isLibsodiumSetupCorrectly(true);
很可能,您需要uninstall/reinstall PHP 扩展针对较新版本的共享库进行编译。
有一个 RFC under discussion for PHP 7.1 right now 如果被接受,将来会变得很轻松。 RFC 在几年后通过了; libsodium 将在 PHP 7.2.