使用 phpseclib 时出现“分段错误”
Posted
技术标签:
【中文标题】使用 phpseclib 时出现“分段错误”【英文标题】:"Segmentation fault" when using phpseclib 【发布时间】:2015-07-24 04:55:43 【问题描述】:我从http://phpseclib.sourceforge.net/下载了phpseclib-0.3.10
我的php版本:PHP 5.2.4
操作系统:CentOS 6.6 版
当我在下面运行时,我在这一行 $ssh->login('username', 'password')
得到“分段错误”
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
$ssh=new Net_SSH2('servername');
if (!$ssh->login('username', 'password'))
exit('Login Failed');
echo $ssh->exec('pwd');
?>
我找不到此问题的原因。请您帮我找出原因。
【问题讨论】:
您可能不想听到这个,但 PHP 5.2 已经过时,不再受支持。从那时起,已经做了很多很多的修复;可能已经修复了分段错误。 【参考方案1】:我的猜测:要么是 fsockopen() 调用,要么是 stream_select() 调用。您可以通过将 die() 放入您的代码中 login() 中的连续点以及其中调用的函数来弄清楚。
正在查找... login() 调用 _login():
https://github.com/phpseclib/phpseclib/blob/0.3.10/phpseclib/Net/SSH2.php#L1801
_login() 调用 _connect():
https://github.com/phpseclib/phpseclib/blob/0.3.10/phpseclib/Net/SSH2.php#L1817
例如。在line 964 in Net/SSH2.php 之前添加die('this far')
。如果它说“到目前为止”,然后尝试添加它。如果你在它之后但之前没有出现 seg 错误,这可能意味着应该归咎于 fsockopen。
然后继续这样做,直到出现 seg 错误。在 stream_select 之前和之后做一个die('this far');
,就在哪里。然后贴出你正在使用的线路。
【讨论】:
感谢 neubert 的回复。我做了堆栈跟踪,我看到以下行抛出分段错误 Math_BigInteger->modPow() SSH2.php:1405 openssl_public_encrypt() BigInteger.php:1697 你能发布一个链接到你的 phpinfo() 吗?也许把它放在一个pastebin上并发布链接。谢谢!以上是关于使用 phpseclib 时出现“分段错误”的主要内容,如果未能解决你的问题,请参考以下文章