Я установил 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 с композитором, но использовать ее, к сожалению, сложнее, чем я думал. Я также пытался использовать расширение libsodium без Halite, но это привело к аналогичным ошибкам, что необходимые классы, константы и функции и т. Д. Не были найдены.
Я также попытался изменить свой автозагрузчик, но странная вещь в любом случае заключается в том, что среда IDE находит все без проблем, но выполнение сценария в браузере просто нет.
Чтобы использовать Halite 2.x, вам необходимо:
Легкий способ проверить, что это настроено:
<?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.