2016年6月29日星期三

PHP SSH2 的各种问题

最近两天,不断碰到php ssh2的问题,总结下来有几个:
1.PHP Warning: ssh2_scp_send(): Failed copying file
 此问题出现在传大文件的时候
2.PHP Warning: ssh2_exec(): Unable to request a channel from remote host
 连接某台机器的时候,执行shell命令的时候。其他机器没问题。

对于第一个问题,测试机上没问题(php ssh2 扩展版本为0.11.3),生产环境有问题(php ssh2 版本为 0.11.0),所以更新生产环境为0.11.3。但是测试还是有问题,百思不得其解。
后面再更新为0.13 stabel版本,ssh2_scp_send 不再报错了,但是传文件后发现文件md5结果不一样!又再google一番,在ssh2_scp_send之后增加一句:ssh2_exec($con, 'exit');这样才ok了。
但是在测试的时候,发现另外一个新的问题:
php: symbol lookup error: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ssh2.so: undefined symbol: libssh2_session_set_timeout
然后 nm ssh2.so |grep libssh2_session_set_timeout,发现这个函数是引用的外部实现。那这个函数在哪个so里面呢?找了一下,在libssh2.so.1里面,但是为啥没找到呢。
和运维同学想了半天,最后发现/etc/ld.so.conf.d/libssh2.conf 这个文件里面没有把 libssh2.so.1的路径包含进去,最后修改libssh2.conf文件,增加 /usr/local/libssh2/lib,这下ok了。

总结:碰到过两次php扩展版本的问题,之前碰到过memcache的问题,也是用的beta版本导致很多问题。这次也是一样。所以以后任何的扩展,都要仔细检查是否是stable版本的。