我无法将文件从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中真的很新,我该怎么解决这个问题?
答案 0 :(得分:1)
在ssh2.sftp:// fopen包装器中使用之前将$ sftp转换为int。
$remoteFilePath = "ssh2.sftp://" . (int)$sftp . "/{$this->argument('remote-folder')}/SomeFolder/{$this->argument('remote-filename')}.txt";
上面的示例代码失败,除非您将$ 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,这应该会有所帮助。