未安装PHP钠?



我第一次尝试使用 Libsodium 进行加密,但我遇到了一个错误。我在 XAMPP 上运行所有内容;钠在/ext/文件夹中,我已经extension=sodium添加到 php.ini 文件中。

这是我的代码。

// This refers to the previous code block.
require "safeCrypto.php"; 
// Do this once then store it somehow:
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$message = 'We are all living in a yellow submarine';
$ciphertext = safeEncrypt($message, $key);
$plaintext = safeDecrypt($ciphertext, $key);
echo $ciphertext;
echo $plaintext;
echo phpversion();

它会引发此错误。

警告:使用未定义的常量SODIUM_CRYPTO_SECRETBOX_KEYBYTES - 假设"SODIUM_CRYPTO_SECRETBOX_KEYBYTES"(这将在未来版本的 PHP 中引发错误)在D:\xampp\htdocs\php\crypttest.php第 6 行
致命错误:未捕获的类型错误:random_bytes() 期望参数 1 是整数,字符串在 D:\xampp\htdocs\php\crypttest.php:6 中给出

get_loaded_extensions()表明钠没有安装,我不知道为什么。php_sodium.dll文件存在于 ext 文件夹中,我在 php.ini 文件中添加了extension=sodium

我使用的是 PHP 7.2.10。

上周末我遇到了同样的问题。 我有一个全新安装的 Windows 10 用作我的新开发计算机 我还安装了带有Apache Netbeans 11.1的JDK 和新安装的 XAMMP (xampp-windows-x64-7.3.11-0-VC15-installer) 安装后,我修改了 php.ini 以取消注释 "extension=sodium",并开始在 xampp shell 中使用命令"php -m"检查钠在 php 中是否处于活动状态。在那里,我看到钠模块已加载。

在我的测试中.php我输入了以下行:

<?php
echo random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
?>

检查它是否有效。可悲的是我得到了一个错误:

Warning: Use of undefined constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES - assumed 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES' (this will throw an Error in a future version of PHP) 

我在这个论坛和其他论坛上做了广泛的研究,以找到一个aswer,但直到我尝试了Jim(https://stackoverflow.com/a/49142981/10509146)的方法才找到一个 他确实回到了早期版本的php,但答案在他的步骤4中。将libsodium.dll复制到"apache/bin"文件夹。 而且libsodium 奏效了! 我完全卸载了Xampp并再次尝试。 结果相同。 您需要做的就是将libsodium.dll从"xampp/php"文件夹复制到"xampp/apache/bin"文件夹,当然还可以取消注释php中的扩展名.ini您就可以开始了。

最新更新