PHP: установка Libsodium в PHP v5.5
Как правильно установить Libsodium с PHP версии 5.5. Я пытаюсь следовать инструкции на https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium
Вот шаги, которые я сделал:
Перейдите по http://windows.php.net/downloads/pecl/releases/libsodium/1.0.6/
Скачайте "php_libsodium-1.0.6-5.5-nts-vc11-x64.zip" и распакуйте файлы.
Скопируйте "libsodium.dll" в мой каталог "C:\Program Files (x86)\PHP\v5.5", где находится "php.exe"
Скопируйте "php_libsodium.dll" в мой каталог "C:\Program Files (x86)\PHP\v5.5\ext"
Включить "extension=php_libsodium.dll" в файле php.ini
Перезагрузите сервер
Но когда я проверил это, написав простой тестовый файл PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
// hash the password and return an ASCII string suitable for storage
$hash_str = sodium_crypto_pwhash_str(
"mypassword",
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
echo "hash: " . $hash_str;
?>
Страница результатов показывает ошибку:
Неустранимая ошибка: вызов неопределенной функции odium_crypto_pwhash_str() в C:\PHP\testLibsodium.php в строке 7
Библиотека Libsodium, похоже, не установлена, потому что не знает функции. Что нужно сделать, чтобы установить PHP Libsodium в PHP версии 5.5? Большое спасибо.
Обновление: я установил версию X86 в соответствии с рекомендациями @iann и запустил этот код:
$storeInDatabase = \Sodium\crypto_pwhash_str(
"safasfdwr32sfdfas234",
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
Теперь кажется, что функция читается, но я получаю сообщение об ошибке:
Примечание. Использование неопределенной константы SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE - предположительно SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE'
Примечание: использование неопределенной константы SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE - предполагается, что SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE'
Предупреждение: Sodium\crypto_pwhash_str() ожидает, что параметр 2 будет длинным
Исправляемая фатальная ошибка: crypto_pwhash_str(): неверные параметры
Означает ли это, что мой libsodium установлен правильно, но почему я получаю ошибку? Еще раз спасибо
1 ответ
sodium_*
функций не было в глобальном пространстве имен до тех пор, пока библиотека не была переведена в собственный PHP, в версии 7.2. Из руководства:
В PHP до 7.2 с libsodium из PECL, функции ниже были определены в пространстве имен Sodium. В PHP 7.2 пространства имен были отброшены в пользу префикса odium_ (чтобы соответствовать внутренним стандартам разработки PHP).
Поэтому, если вы устанавливаете из PECL, вам нужно использовать предыдущие имена функций. В твоем случае:
$hash_str = \Sodium\crypto_pwhash_str(
...