Когда я пытаюсь закрыть соединение ssh2, нет ответа назад

Я написал скрипт php для локального выполнения на сервере apache с php7.3, выполняя следующие действия:

  1. доступ к серверу через ssh2
  2. проверить, существует ли файл
  3. тесная связь
  4. печать объекта данных json в качестве ответа.

Скрипт работает без проблем, кроме закрытия соединения. если я добавлю функцию ssh2_disconnect, ответ не вернется. Что мне не хватает? Вот мой код:

<?php

error_reporting(1);
ini_set('display_errors', '1');

    $config = ["server"=>"10.1.201.1","port"=>"22","user"=>"root","password"=>"root","folder"=>"/"];
    $files = ["file1.pdf","file2.pdf"];
    $result = [];
    $ftpConnect = ssh2_connect($config['server'],$config['port']);
        ssh2_auth_password($ftpConnect,$config['user'],$config['password']);
    $sftp = ssh2_sftp($ftpConnect);

foreach ($files as $file){
    $fileExists = file_exists("ssh2.sftp://". intval($sftp) . $config['folder'] . $file);
        if($fileExists){
            $result[$file]= ["status"=>"Found"];
        }else $result[$file]= ["status"=>"Not found"];
}
//ssh2_disconnect($ftpConnect); only if uncommented, script wouldn't work
header('content-type:text/json; charset=UTF-8');
echo json_encode($result);
?>

2 ответа

Решение

Кажется, это зависит от версии. ssh2_disconnect это единственная функция, которую вы используете, чтобы быть доступным с PECL ssh2 >= 1.0 все остальные ssh2 функции доступны для PECL ssh2 >= 0.9.0. Следующий комментарий позволяет нам думать, что php >= 7 также необходим.

http://php.net/manual/function.ssh2-disconnect.php

Вот как он предлагает закрыть связь без ssh2_disconnect имеется в наличии:

$session = null; unset($session); // close connection

Как кажется в более поздних реализациях, мы могли бы успешно закрыть соединение по SFTP с помощью ssh2-disconnect.

Так что для тех, кто это читает, я думаю, что сейчас это лучшее решение.

Пример из журналов SFTP-сервера:

клиент в xxx отправил сообщение SSH_DISCONNECT: PECL/ssh2 (http://pecl.php.net/packages/ssh2) (приложение отключено)

(Также ошибок при передаче файлов нет)

Другие вопросы по тегам