2015-05-13 18 views
6

tôi tải phpseclib-0.3.10 từ http://phpseclib.sourceforge.net/"lỗi Segmentation" khi sử dụng phpseclib

My php Version: PHP 5.2.4

Hệ điều hành: CentOS 6.6 phát hành

Khi tôi chạy theo sau tôi nhận được "Lỗi phân đoạn" tại dòng này $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'); 
?> 

Tôi không thể tìm thấy lý do cho vấn đề này. Bạn có thể vui lòng giúp tôi tìm lý do cho việc này không.

+1

Bạn có thể không muốn nghe điều này, nhưng PHP 5.2 đã lỗi thời và không được hỗ trợ nữa. Nhiều, nhiều bản sửa lỗi đã được thực hiện kể từ đó; người ta có thể đã sửa lỗi phân đoạn. – Shi

Trả lời

0

Đoán của tôi: hoặc gọi fsockopen() hoặc gọi stream_select(). Bạn có thể tìm ra bằng cách đặt die() trong mã của bạn tại các điểm liên tiếp trong vòng đăng nhập() và các hàm được gọi trong đó.

Nhìn nó lên ... đăng nhập() gọi _login():

https://github.com/phpseclib/phpseclib/blob/0.3.10/phpseclib/Net/SSH2.php#L1801

_login() gọi _connect():

https://github.com/phpseclib/phpseclib/blob/0.3.10/phpseclib/Net/SSH2.php#L1817

ví dụ. trước line 964 in Net/SSH2.php thêm die('this far'). Nếu nó nói "này xa" sau đó thử thêm nó sau. Nếu bạn nhận được một lỗi seg khi nó sau nhưng không phải trước đó có thể có nghĩa là nó là fsockopen đó là để đổ lỗi.

Và tiếp tục làm điều đó cho đến khi bạn gặp lỗi seg. Thực hiện die('this far'); trước và sau stream_select và chỉ ở nơi nào. Và sau đó đăng dòng bạn đang nhận nó trên.

+0

Cảm ơn neubert đã trả lời. Tôi đã stack theo dõi và tôi thấy rằng sau dòng ném Segmentation lỗi Math_BigInteger-> modPow() SSH2.php: 1405 openssl_public_encrypt() BigInteger.php: 1697 –

+0

Bạn có thể gửi một liên kết đến phpinfo của bạn()? Có thể đặt nó trên một pastebin và gửi liên kết. Cảm ơn! – neubert

Các vấn đề liên quan