SSH2 не работает на новом сервере

Мы сменили хостинговые компании, и там, где работал ssh2, он больше не работает. У нас есть ssh2 включен на новом сервере вместе с allow_url_fopen включен.

Единственное отличие, которое я вижу, состоит в том, что использовался старый сервер. PHP 5.4.45 и новый сервер использует PHP 5.6.28,

Однако теперь я получаю следующую ошибку.
Could not open remote file: ssh2.sftp://Resource id #337/my/directory/file.txt

Вот пример моего кода:

$remote_host = "myhostinfohere";
$remote_port = 22;
$remote_user = "myuser";
$remote_pass = "mypassword";
$remote_dir = "/my/directory/";
$remote_file = 'file.txt';

try {
$remote_conn = ssh2_connect($remote_host, $remote_port);
} catch (Exception $e) {
die("could not connect to ".$remote_host);
}

try {
ssh2_auth_password($remote_conn, $remote_user, $remote_pass);
} catch (Exception $e) {
die("Password failed on ".$remote_host);
}

$sftp = ssh2_sftp($remote_conn);

$fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

//If I add this it says it doesn't exists for some reason even though I can see the file if I log in remotely.
$fileExists = file_exists($fetch_string);
if (!$fileExists) {
die('File does not exist');
}

$stream = fopen($fetch_string, 'r');

if (!$stream) {
die("Could not open remote file: " . $fetch_string . "\n");
}

Опять же, этот же код работает на старом сервере, но не на новом сервере. Что мне не хватает? Я могу легко скопировать файл на свой сервер с ssh2_scp_recv() который работает нормально, так что я не уверен, что происходит с fopen() функция.

1

Решение

После нескольких часов проб разных вариантов я наконец наткнулся на это. http://php.net/manual/en/wrappers.ssh2.php

Я изменил это:
$fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

К этому:
$fetch_string = "ssh2.sftp://user:[email protected]" . $remote_dir . $remote_file;

И предсто fopen() Функция начала работать.

Я не уверен, если в более новых версиях, если они просто устарели ssh2_sftp() или если это просто ошибка, подобная упомянутой @billynoah, потому что вышеупомянутая ссылка даже не использовала ее.

Я знаю, сколько боли это было так, надеюсь, это поможет кому-то еще!

5

Другие решения

Здесь $ fetch_string = «ssh2.sftp: // $ sftp». $ remote_dir. $ Remote_file;

используйте intval ($ sftp) вместо $ sftp

3

Скорее всего, это связано с этой ошибкой в ​​расширении ssh2, с которой я недавно столкнулся:

https://bugs.php.net/bug.php?id=71376

И что нарушает функциональность обновления ssh2 в WordPress:

https://core.trac.wordpress.org/ticket/35517

1

Я также столкнулся с той же проблемой, и я много боролся. Для меня это исправлено сейчас.
Вот что я сделал:
Моя версия PHP: 5.6.25
Скачал последнюю версию php_ssh2.dll из: https://phpfashion.com/php-ssh2-dll-for-php-5-6-and-7-0 (php_ssh2.dll для PHP 5.6 x64)
Заменил php_ssh2.dll в следующем месте: «C: \ wamp64 \ Bin \ PHP \ php5.6.25 \ вн» & перезапустил все мои сервисы.

1

Убедитесь, что служба sftp включена на сервере (Powershell)

0
По вопросам рекламы [email protected]