2015-05-13 3 views
6

Я скачал phpseclib-0.3.10 из http://phpseclib.sourceforge.net/"ошибка сегментирования" при использовании phpseclib

Мой 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'); 
?> 

Я не могу найти причину этой проблемы. Не могли бы вы помочь мне найти причину этого.

+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. Сделайте die('this far'); до и после stream_select и только где. Затем отправьте строку, в которой вы ее набираете.

+0

Спасибо neubert за ответ. Я сделал трассировку стека, и я вижу, что следующие строки бросают ошибку сегментации Math_BigInteger-> modPow() SSH2.php: 1405 openssl_public_encrypt() BigInteger.php: 1697 –

+0

Можете ли вы разместить ссылку на свой phpinfo()? Возможно, поместите его на пастебин и отправьте ссылку. Благодаря! – neubert

Смежные вопросы