ssh2_connect вызывает ошибку 324 (net::ERR_EMPTY_RESPONSE):

При попытке перечислить файлы, присутствующие в удаленном расположении sftp, с помощью php, я получаю эту ошибку:

Ошибка 324 (net::ERR_EMPTY_RESPONSE):

Сервер закрыл соединение, не отправив никаких данных. На моем другом ламповом сервере тот же код работает нормально. Пожалуйста, укажите, где я что-то упускаю, если вы можете помочь, пожалуйста. Заранее спасибо.

function listBuildFiles() {

global $sftp_host, $sftp_username, $sftp_password, $sftp_path;
$connection = ssh2_connect($sftp_host);
// Authenticate
if (!ssh2_auth_password($connection, $sftp_username, $sftp_password)) {
    throw new Exception('Unable to connect.');
}

// Create our SFTP resource
if (!$sftp = ssh2_sftp($connection)) {
    throw new Exception('Unable to create SFTP connection.');
}

/**
 * Now that we have our SFTP resource, we can open a directory resource
 * to get us a list of files. Here we will use the $sftp resource in
 * our address string as I previously mentioned since our ssh2://
 * protocol allows it.
 */
$files = array();
$dirHandle = opendir("ssh2.sftp://$sftp$sftp_path");
    $i=0;
// Properly scan through the directory for files, ignoring directory indexes (. & ..)
while (false !== ($file = readdir($dirHandle))) {
    if ($file != '.' && $file != '..') {
        $files[$i] = $file;
        $i++;
    }
}

echo '<select name="buildName">';
echo '<option>Please Select a build</option>';
foreach ($files as $filename) {
      echo "<option value=\"$filename\">$filename</option>";
    }
echo '</select>';
ssh2_exec($connection, "exit");

Спасибо, Уджвал


person singh    schedule 09.07.2012    source источник
comment
Вы смотрели свои журналы php/apache?   -  person Boris Guéry    schedule 09.07.2012
comment
А вы смотрели свой журнал sshd?   -  person dave4420    schedule 09.07.2012


Ответы (2)


С phpseclib, чистой реализацией PHP SFTP, вы можете увидеть полные журналы того, что происходит. Пример:

<?php
include('Net/SFTP.php');

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');

echo $ssh->getLog();
print_r($ssh->getErrors());
?>

Разработчик phpseclib также довольно активно предоставляет поддержку, поэтому, если вы не можете понять это из журналов или сообщений об ошибках, он, вероятно, сможет.

person Community    schedule 10.07.2012

Просто чтобы убедиться, что на стороне сервера нет проблем, вы можете открыть консоль и попробовать необработанное ssh-соединение в подробном режиме:

ssh -v [email protected]

это отслеживает все взаимодействия между сервером и клиентом, возможно, дает вам некоторую подсказку со стороны сервера.

person jacktrade    schedule 09.07.2012