带有 PHP 7.0 的 AWS EC2 标准 AWS AMI - 安装 libsodium 配方
AWS EC2 standard AWS AMI with PHP 7.0 - install libsodium recipe
(为清楚起见进行了编辑 - 已接受答案)
Libsodium 已经为 PHP7 做好了准备。在这样做的过程中,名称空间被删除,并为方法添加了 sodium_ 前缀,为常量添加了 SODIUM_ 前缀。版本方法也被删除。
此 github 页面记录了所有新函数和常量,并且该项目提供了与 \Sodium 命名空间的向后兼容性:https://github.com/Firehed/sodium/blob/master/src/we_cant_have_nice_things.php
秘诀:在 PHP 7 和 AWS AMI
上安装 Libsodium
# PHP 7.0 Libsodium install AWS AMI
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
; Enable libsodium extension module
extension=sodium.so
service httpd restart
命令行测试以验证钠已安装
php7 --info | grep sodium
测试 php 函数以验证密码散列的调用模式
<?php
$password = "hello";
$hash_str = sodium_crypto_pwhash_str(
$password,
\SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
\SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
var_dump($password, $hash_str);
感谢@GracefulRestart 的帮助。
我在这里看到几个问题,第一个是您的测试文件似乎无法正常工作。
运行 你的测试代码与 libsodium 一起工作 PHP 7 returns 出现以下错误:
PHP Fatal error: Uncaught Error: Call to undefined function Sodium\library_version_major()
如果要查看版本,从phpinfo()函数中搜索数据可能更方便:
<?php phpinfo(); ?>
# or from CLI
php7 --info |grep sodium
我注意到的另一个问题是在您的安装步骤中,您从源代码和 PECL 安装了 libsodium。默认情况下,make install
命令将库放在 /usr/local/lib 中,而 pecl7 install libsodium
通常会将库安装到默认的 PHP 模块目录中。
如果您尝试从源安装,您的 /etc/php-7.0.d/20-libsodium.ini 文件不正确,因为它正在加载您从 PECL 安装的 libsodium 库(您可以检查哪个目录它是通过检查来自 phpinfo() 的 extension_dir ini 设置来加载的。
如果你只需要从PECL安装,你不需要所有的开发包或任何手动编译。
编辑我修改了您发布的食谱以删除下载源代码的无关步骤,只需使用 PECL 完成所有操作:
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
# PHP 7.0
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
; Enable libsodium extension module
extension=sodium.so
service httpd restart
如果您的发行版的 YUM 存储库提供 php7-libsodium 软件包,那将是一个更小的配方
希望对您有所帮助
这是我对这个食谱的解决方案。
wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
tar -xvf libsodium-1.0.18.tar.gz
cd libsodium-1.0.18
./configure
make && make check
make install
sudo pecl7 install -f libsodium
pecl7 应安装并修改 php.ini 文件以在 php.ini
中包含以下内容
extension="sodium.so"
如果您 运行 PHP 在 Elastic Beanstalk 中,以下文件 ./ebextentions/script.config :
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/001_libsodium.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz && tar -xvf libsodium-1.0.18.tar.gz && cd libsodium-1.0.18 && ./configure && make && make check && sudo make install && sudo pecl7 install -f libsodium
(为清楚起见进行了编辑 - 已接受答案)
Libsodium 已经为 PHP7 做好了准备。在这样做的过程中,名称空间被删除,并为方法添加了 sodium_ 前缀,为常量添加了 SODIUM_ 前缀。版本方法也被删除。
此 github 页面记录了所有新函数和常量,并且该项目提供了与 \Sodium 命名空间的向后兼容性:https://github.com/Firehed/sodium/blob/master/src/we_cant_have_nice_things.php
秘诀:在 PHP 7 和 AWS AMI
上安装 Libsodium# PHP 7.0 Libsodium install AWS AMI
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
; Enable libsodium extension module
extension=sodium.so
service httpd restart
命令行测试以验证钠已安装
php7 --info | grep sodium
测试 php 函数以验证密码散列的调用模式
<?php
$password = "hello";
$hash_str = sodium_crypto_pwhash_str(
$password,
\SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
\SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
var_dump($password, $hash_str);
感谢@GracefulRestart 的帮助。
我在这里看到几个问题,第一个是您的测试文件似乎无法正常工作。
运行 你的测试代码与 libsodium 一起工作 PHP 7 returns 出现以下错误:
PHP Fatal error: Uncaught Error: Call to undefined function Sodium\library_version_major()
如果要查看版本,从phpinfo()函数中搜索数据可能更方便:
<?php phpinfo(); ?>
# or from CLI
php7 --info |grep sodium
我注意到的另一个问题是在您的安装步骤中,您从源代码和 PECL 安装了 libsodium。默认情况下,make install
命令将库放在 /usr/local/lib 中,而 pecl7 install libsodium
通常会将库安装到默认的 PHP 模块目录中。
如果您尝试从源安装,您的 /etc/php-7.0.d/20-libsodium.ini 文件不正确,因为它正在加载您从 PECL 安装的 libsodium 库(您可以检查哪个目录它是通过检查来自 phpinfo() 的 extension_dir ini 设置来加载的。
如果你只需要从PECL安装,你不需要所有的开发包或任何手动编译。
编辑我修改了您发布的食谱以删除下载源代码的无关步骤,只需使用 PECL 完成所有操作:
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
# PHP 7.0
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
; Enable libsodium extension module
extension=sodium.so
service httpd restart
如果您的发行版的 YUM 存储库提供 php7-libsodium 软件包,那将是一个更小的配方
希望对您有所帮助
这是我对这个食谱的解决方案。
wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
tar -xvf libsodium-1.0.18.tar.gz
cd libsodium-1.0.18
./configure
make && make check
make install
sudo pecl7 install -f libsodium
pecl7 应安装并修改 php.ini 文件以在 php.ini
中包含以下内容extension="sodium.so"
如果您 运行 PHP 在 Elastic Beanstalk 中,以下文件 ./ebextentions/script.config :
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/001_libsodium.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz && tar -xvf libsodium-1.0.18.tar.gz && cd libsodium-1.0.18 && ./configure && make && make check && sudo make install && sudo pecl7 install -f libsodium