SSH2 что я делаю не так?

У меня проблемы с копированием файла из моего проекта laravel на другой сервер. Это то, что я делаю.

    $connection = ssh2_connect($this->ftpHostname, $this->ftpPort);

    if (!$connection) {
        throw new \Exception("Couldn't connect to {$this->ftpHostname}:{$this->ftpPort}");
    }

    $loginResult = ssh2_auth_password($connection, 'usrname', 'pswrd');

    if (!$loginResult) {
        throw new \Exception("Username or Password not accepted for {$this->ftpHostname}:{$this->ftpPort}");
    }

    $sftp = ssh2_sftp($connection);
    $fullFilePath = storage_path() .'/'.$this->argument('local-file');
    $remoteFilePath = "ssh2.sftp://{$sftp}/{$this->argument('remote-folder')}/SomeFolder/{$this->argument('remote-filename')}.txt";

    $copyResult = copy($fullFilePath, $remoteFilePath);

Но это дает мне эту ошибку

[ErrorException]
copy(): Unable to open ssh2.sftp://Resource id #621/My Folders/Upload only/sample.txt on remote host

Я действительно новичок в SSH, как мне решить это?

1 ответ

Решение

Приведите $ sftp к int, прежде чем использовать его в оболочке ssh2.sftp:// fopen.

$remoteFilePath = "ssh2.sftp://" . (int)$sftp . "/{$this->argument('remote-folder')}/SomeFolder/{$this->argument('remote-filename')}.txt";

Из ssh2_sftp

Приведенный выше пример кода завершится ошибкой, если вы не приведете $ stftp к (int) или не используете intval ()

$ stream = fopen ("ssh2.sftp: // $ sftp / path / to / file", 'r'); // Сбой

$stream = fopen("ssh2.sftp://" . (int)$sftp . "/path/to/file", 'r'); // радость

Поскольку copy() будет использовать оболочки fopen для интерпретации вашего ssh2.sftp:// uri, это должно помочь.

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