2015-05-13 32 views
6

當我下載phpseclib-0.3.10http://phpseclib.sourceforge.net/「段錯誤」 使用phpseclib

我的PHP版本:PHP 5.2.4

OS:CentOS版本6.6

當我運行以下我在此線路上收到「Segmentation fault」$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'); 
?> 

我無法找到此問題的原因。你能幫我找到原因嗎?

+1

你可能不想聽到這個,但PHP 5.2已經過時,不再支持。從那時起,許多許多修復工作都已完成。人們可能已經修復了分段故障。 – Shi

回答

0

我的猜測:無論是fsockopen()調用還是stream_select()調用。你可以通過在代碼中將die()放在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');,並且永遠在哪裏。然後發佈你的線。

+0

感謝neubert的回覆。我做了堆棧跟蹤,我發現下面的行引發Segmentation錯誤Math_BigInteger-> modPow()SSH2.php:1405 openssl_public_encrypt()BigInteger.php:1697 –

+0

你可以發佈一個鏈接到你的phpinfo()嗎?也許把它放在一個pastebin併發布鏈接。謝謝! – neubert