2017-07-19 193 views
0

我在将文件从我的laravel项目复制到另一台服务器时遇到问题。这就是我正在做的。SSH2我做错了什么?

$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我该如何解决这个问题?

+0

我使用的是ssh2,这就是我所知道的@ThomasMoors –

+0

它是否正常返回? ssh2.sftp://资源ID#621 因为我混淆了错误的地方 –

回答

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()

$流=的fopen(“ssh2.sftp失败://$ sftp/path/to/file“,'r'); //失败

$ stream = fopen(“ssh2.sftp://”。(int)$ sftp。“/ path/to/file”,'r'); //喜悦

由于copy()将使用fopen封装来解释你的ssh2.sftp:// URI,它应该帮助。

+0

嗨,它仍然是相同的 copy():无法打开ssh2.sftp:// 621 /我的文件夹/仅上载/示例 .txt在远程主机 –

+0

我的不好,这是创建错误的文件夹结构。你的回答是正确的! –