Mac+Docker+PHP7安装php扩展SSH2

背景描述:最近在做公司旧项目的需求,要求实现用sftp上传文件到远程服务器,在本地调试的时候遇到了以下问题:

Fatal error: Uncaught Error: Call to undefined function ssh2_connect() in /commonPushFtp.class.php:26

其实就是因为本地docker的php没有安装ssh2扩展导致。
话不多说,上步骤。
先补充一点,docker没有php.ini文件,所有php扩展都放在: /usr/src/php/ext ,初始化执行以下指令即可

docker-php-source extract | delete

安装步骤

1、先安装libssh2

$ wget https://www.libssh2.org/download/libssh2-1.8.2.tar.gz --no-check-certificate

$ tar -zxvf libssh2-1.8.2.tar.gz

$ cd libssh2-1.8.2

$ ./configure --prefix=/usr/local/libssh2

$ make && make install

2、安装SSH2扩展

$ wget http://pecl.php.net/get/ssh2-1.3.1.tgz -O /tmp/ssh2.tgz
&& pecl install /tmp/ssh2.tgz
&& rm -rf /tmp/ssh2.tgz
&& docker-php-ext-enable ssh2

但是其实最终安装成功SSH2是用了下面两行代码

$ pecl install ssh2-1.3.1

$ docker-php-ext-enable ssh2

注意事项

在安装扩展过程出现了以下问题
1、安装libssh2第一步没有加--no-check-certificate,会提示以下错误ERROR: The certificate of ‘xxxxx’ is not trusted
2、提示php版本要在4-6之间的,这个是因为libssh2版本太低了,用上面版本即可
3、报错libssh2_priv.h:257:22: error: field 'exchange_hash' has incomplete type libssh2_sha1_ctx exchange_hash;
这种情况有我更新我的openssl版本为1.1.1,并且用的较新的libssh2版本即可
4、安装ssh2的时候遇到了一个问题,
执行pecl install ssh2-1.3.1的时候会提示
libssh2 prefix? [autodetect] :
网上的教程都说的直接回车即可,但我回车之后没有找到

checking for ssh2 files in default path… not found
configure: error: The required libssh2 library was not found. You can obtain that package from http://sourceforge.net/projects/libssh2/
ERROR: /tmp/pear/temp/ssh2/configure --with-php-config=/usr/local/bin/php-config --with-ssh2' failed
意思就是没找到libssh2,报这个错那就不能回车了,在提示libssh2 prefix? [autodetect] :的时候直接输入我们刚才安装libssh2的位置/usr/local/libssh2,即可。

题外话

以上虽然安装完成了,但是我们的题目是在docker下安装扩展,所以其实还没完。其实以上的安装已经可用了,只是重启docker之后就没了。
所以其实在docker的Dockerfile-php文件中添加

总结

docker中php扩展安装方式

1、PHP源码文件目录自带扩展 docker-php-ext-install直接安装
2、pecl扩展 因为一些扩展不包含在PHP源码文件中,PHP 的扩展库仓库中存在。用 pecl install 安装扩展,再用 docker-php-ext-enable 命令 启用扩展
3、其他扩展 一些既不在 PHP 源码包,也不再 PECL 扩展仓库中的扩展,可以通过下载扩展程序源码,编译安装的方式安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值