SSH2我做错了什么?

时间:2017-07-19 13:40:10

标签: php linux laravel sftp ssh2-sftp

我无法将文件从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 个答案:

答案 0 :(得分:1)

在ssh2.sftp:// fopen包装器中使用之前将$ sftp转换为int。

$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,这应该会有所帮助。