PHP: установка Libsodium в PHP v5.5

Как правильно установить Libsodium с PHP версии 5.5. Я пытаюсь следовать инструкции на https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium

Вот шаги, которые я сделал:

  1. Перейдите по http://windows.php.net/downloads/pecl/releases/libsodium/1.0.6/

  2. Скачайте "php_libsodium-1.0.6-5.5-nts-vc11-x64.zip" и распакуйте файлы.

  3. Скопируйте "libsodium.dll" в мой каталог "C:\Program Files (x86)\PHP\v5.5", где находится "php.exe"

  4. Скопируйте "php_libsodium.dll" в мой каталог "C:\Program Files (x86)\PHP\v5.5\ext"

  5. Включить "extension=php_libsodium.dll" в файле php.ini

  6. Перезагрузите сервер

Но когда я проверил это, написав простой тестовый файл 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(
...
Другие вопросы по тегам