Ошибка при попытке получить содержимое файла с помощью fopen и SSH2

Я пытаюсь: - подключиться к серверу - просмотреть все файлы - прочитать файлы и просмотреть содержимое.

Связь работает хорошо:

$conn_id = ssh2_connect('xxx.com', 22);
$login_result = ssh2_auth_password($conn_id, 'xxxxxx', 'xxxxxxxxx');
$sftp = ssh2_sftp($conn_id);
$dir = "ssh2.sftp://$sftp/home";
$ftp_contents = scanFilesystem($dir);

Затем я перебираю каталог и получаю все имена файлов, работаю как шарм:

foreach($ftp_contents as  $key => $currentFilename){
echo($currentFilename);
}

Затем я пытаюсь получить содержимое файла.... И это не работает.

$stream = fopen("ssh2.sftp://$sftp/home/".$currentFilename, 'r');
            echo($stream);

Есть ошибка вывода:

Предупреждение: fopen(ssh2.sftp://Идентификатор ресурса #4/home/myfile.xml) [function.fopen]: не удалось открыть поток: сбой операции в /home/xxxxxx/public_html/xxx.php в строке 38

Строка 38 является концом foreach.

Я пытаюсь с:

fopen("ssh2.sftp://$sftp/home/".$currentFilename, 'r');
fopen("ssh2.sftp://$sftp/".$currentFilename, 'r');
fopen("/home/".$currentFilename, 'r');
fopen("home/".$currentFilename, 'r');

Ничего не работает, всегда одна и та же ошибка, может кто-нибудь помочь мне, пожалуйста? Спасибо.

обновление: я пытаюсь с: $stream = file_get_contents("ssh2.sftp://$sftp/home/$data"); тоже не работает ...

Все еще получил ошибку:

Предупреждение: file_get_contents() [function.file-get-contents]: невозможно открыть ssh2.sftp://Resource id #3/xxx.xml на удаленном хосте в /home/xxxxxx/public_html/xxxx.php в строке 40.

Я понятия не имею... может кто-нибудь мне помочь?


person Peter    schedule 09.04.2014    source источник
comment
я отказался от встроенных в php функций ssh2 после многих неудачных попыток и начал использовать: phpseclib.sourceforge.net   -  person    schedule 10.04.2014
comment
Спасибо, но дело не в этом, мне это абсолютно необходимо, так что спасибо, но нет, спасибо! ;)   -  person Peter    schedule 10.04.2014
comment
Может быть проблема с разрешениями..   -  person neubert    schedule 10.04.2014
comment
7,7,7 установлены в папке... так что, похоже, это не проблема... у кого-нибудь есть идея?   -  person Peter    schedule 10.04.2014
comment
У меня все еще есть ошибка, но теперь это идентификатор ресурса / № 3, а не № 4 ... Я понятия не имею.   -  person Peter    schedule 11.04.2014
comment
Может быть, вы могли бы написать тестовый скрипт с phpseclib и использовать его возможности ведения журнала? Это, очевидно, не исправит libssh2, но информация, показанная в журналах phpseclib, может дать вам информацию для решения проблемы.. (у libssh2 нет сопоставимого журнала)   -  person neubert    schedule 16.04.2014


Ответы (1)


У меня такая же проблема. Решается путем преобразования ресурса $sftp в целое число перед использованием его в качестве URL-адреса, который является строкой. Должно работать так:

$sftp = (int)$sftp;
$stream = fopen("ssh2.sftp://$sftp/home/".$currentFilename, 'r');
person Artem Samoilyk    schedule 05.07.2018
comment
Я сбросил свой пароль переполнения стека, чтобы вернуться в свою учетную запись, чтобы проголосовать за это и поблагодарить вас за ваше решение, поскольку я перепробовал сотню вещей и никогда не преодолел ошибку сервера, прежде чем использовать ваше решение и преобразовать ресурс в целое число. Слава! - person Davis; 16.04.2021