Включение Paragonie Halite в проект не находит переменные и функции

Я установил libsodium на Windows для PHP 7 и разрабатываю свой проект с помощью PHPStorm. Я также установил Halite от Paragonie, который невозможно было установить, если расширение 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):

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 — оба ничего не изменили.

Я только что установил библиотеку halite из paragonie с помощью composer, но использовать ее, к сожалению, сложнее, чем я думал. Я также пытался использовать расширение libsodium без Halite, но это приводило к тем же ошибкам, что не были найдены необходимые классы, константы и функции и так далее.

Я также пытался изменить свой автозагрузчик, но в любом случае странным является то, что IDE находит все без проблем, а выполнение скрипта в браузере — нет.

2

Решение

Чтобы использовать Halite 2.x, вам необходимо иметь:

  • Libsodium 1.0.9+ (желательно 1.0.10, если у вас проблемы с компиляцией .9)
  • PECL Libsodium 1.0.3+ (предпочтительно 1.0.6) составлен против libsodium 1.0.9+.

Простой способ убедиться, что это настроено:

<?php
use \ParagonIE\Halite\Halite;

var_dump(Halite::isLibsodiumSetupCorrectly());

Если вам нужна более конкретная информация о том, что не работает, просто запустите это:

<?php
use \ParagonIE\Halite\Halite;

// TRUE enables verbose output:
Halite::isLibsodiumSetupCorrectly(true);

Скорее всего, вам нужно будет удалить / переустановить расширение PHP, скомпилированное для более новой версии общей библиотеки.

Там есть RFC сейчас обсуждается для PHP 7.1 это сделает это безболезненным в будущем, если оно будет принято. RFC прошло, годы спустя; libsodium будет в PHP 7.2.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]