在 PHP 7.1 中安装 libsodium 时出错

Posted

技术标签:

【中文标题】在 PHP 7.1 中安装 libsodium 时出错【英文标题】:Error while installing libsodium in PHP 7.1 【发布时间】:2019-05-24 12:17:27 【问题描述】:

我在 php 7.1.25 中,mcrypt 是当前使用的扩展,mcrypt 将在 PHP 7.2 中被弃用,Libsodium 将被添加到 PHP 7.2 的核心扩展中

现在我需要尝试在 PHP 7.1 中安装 libsodium 并查看它是如何工作的,遵循此 https://lukasmestan.com/install-libsodium-extension-in-php7 但安装失败。也更新了 PECL 包。请参阅下面的错误!

任何帮助将不胜感激。提前致谢!

$ sudo pecl install -f libsodium
downloading libsodium-2.0.20.tgz ...
Starting to download libsodium-2.0.20.tgz (28,504 bytes)
.........done: 28,504 bytes
4 source files, building
running: phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
building in /tmp/pear/temp/pear-build-rootsL5uMO/libsodium-2.0.20
running: /tmp/pear/temp/libsodium/configure --with-php-config=/usr/bin/php-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for PHP prefix... /usr
checking for PHP includes... -I/usr/include/php/20160303 -I/usr/include/php/20160303/main -I/usr/include/php/20160303/TSRM -I/usr/include/php/20160303/Zend -I/usr/include/php/20160303/ext -I/usr/include/php/20160303/ext/date/lib
checking for PHP extension directory... /usr/lib/php/20160303
checking for PHP installed headers prefix... /usr/include/php/20160303
checking if debug is enabled... no
checking if zts is enabled... no
checking for re2c... no
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
checking for gawk... gawk
checking for sodium support... yes, shared
checking for pkg-config... no
checking for libsodium... configure: error: Please install libsodium - See https://github.com/jedisct1/libsodium
ERROR: `/tmp/pear/temp/libsodium/configure --with-php-config=/usr/bin/php-config' failed

【问题讨论】:

"configure: error: Please install libsodium - See github.com/jedisct1/libsodium" 看起来相当简单,但您没有提及它。您是否安装了库但扩展构建系统找不到它?您是否在询问有关如何安装库的说明? 试试这个替代方法 openssl_encrypt ***.com/questions/41272257/… 感谢您的评论。我对按照lukasmestan.com/install-libsodium-extension-in-php7 安装库感到困惑。需要有关如何安装和配置库的说明 【参考方案1】:

@VenkateshLB 你必须先安装你的 linux 发行版提供的 libsodium。

CentOS 7:

yum install libsodium libsodium-devel

Ubuntu 18.04:

apt install libsodium libsodium-dev

安装后,执行PECL命令。

【讨论】:

我需要运行sudo apt install libsodium-dev,然后运行sudo pecl install libsodium,然后它告诉我'您应该将“extension=sodium.so”添加到php.ini'。 @Ryan 您的评论应该是正确答案,谢谢! @Ryan 的建议奏效了。它也适用于 brew php@7.3 版本。 @LeoFisher 很高兴它有帮助。我在这里将我的评论转换为答案,以防您想投票:***.com/a/63980750/470749 @JaredChu 很高兴它有帮助。我在这里将我的评论转换为答案,以防您想投票:***.com/a/63980750/470749【参考方案2】:

这对我不起作用(Ubuntu 16.04)(让$ pecl install -f libsodium 工作):

$ apt install libsodium libsodium-dev

这里出现以下错误:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libsodium

可行的是手动下载 libsodium 并编译它:

下载 libsodium 源码并解压

$ wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
$ tar -xzf LATEST.tar.gz

编译 libsodium

$ cd libsodium-stable/
$ ./configure
$ make && make check
$ make install

见:https://libsodium.gitbook.io/doc/installation

之后通过 PECL 安装 libsodium:

$ pecl install -f libsodium

疑难解答:

$ pecl install -f libsodium 仍然无法正常工作

检查是否安装了PECL:

$ pecl version
PEAR Version: ...
PHP Version: ...
Zend Engine Version: ...
Running on: ...

如果出现错误,则必须先安装 PECL:

$ apt install php-pear

检查 phpize 是否可用(为 PHP 编译 libsodium):

$ phpize --version
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

如果出现错误,则必须安装 php7.1-dev:

$ apt install php7.1-dev

如何在 PHP 中激活钠?

你只需要在你的 PHP 扩展目录(可能在/etc/php/7.1/mods-available/)中创建一个文件 sodium.ini

内容:

extension=sodium.so

您可以通过以下方式激活模块:

$ phpenmod -v 7.1 sodium

(可以通过phpdismod -v 7.1 sodium进行停用。)

phpinfo 现在应该列出模块:

$ php -i | grep sodium
/etc/php/7.1/cli/conf.d/20-sodium.ini,
sodium
sodium support => enabled
sodium compiled version => 2.0.20
libsodium headers version => 1.0.18
libsodium library version => 1.0.18

【讨论】:

我对@9​​87654338@这一行的期望是一样的!我的配置包含在 apache2 中,所以正确的路径是 /etc/php/7.4/mods-available//etc/php/7.4/apache2/conf.d/ 吗?【参考方案3】:

将我的评论更改为答案,因为它帮助了很多人:

我需要运行sudo apt install libsodium-dev,然后运行sudo pecl install libsodium,然后它告诉我'你应该将“extension=sodium.so”添加到php.ini'。

【讨论】:

以上是关于在 PHP 7.1 中安装 libsodium 时出错的主要内容,如果未能解决你的问题,请参考以下文章

PHP7.2中安装mcrypt扩展的问题

Docker中安装elasticsearch6.7.1

Docker中安装elasticsearch6.7.1

如何在php中安装posix

当系统中安装了多个 php 版本时,如何使用 pecl 为特定的 php 版本安装 php 扩展?

libsodium PHP将私钥存储在文件中