通过SFTP使用Curl下载文件

3

这只会创建一个空文件,文件中没有任何内容。

$host = 'domain.com';
$pass = 'xxx';

$remote = 'sftp://var/www/test.txt';
$local = 'C:\wamp\www\test.txt';

$curl = curl_init();
$file = fopen($local, 'w');
curl_setopt($curl, CURLOPT_URL, $remote);
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "root:$pass");
curl_setopt($curl, CURLOPT_FILE, $file);
curl_exec($curl);
curl_close($curl);
fclose($file);

解决方案

$host = 'domain.com';
$pass = 'xxx';

$remote = "sftp://root:$pass@$host/var/www/test.txt";
$local = 'C:\wamp\www\test.txt';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $remote);
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "root:$pass");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
file_put_contents($local, curl_exec($curl));
curl_close($curl);
1个回答

3
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$d = curl_exec($curl);
// data is in $d var, write it somewhere ;)
$local = "/tmp/myfile.txt";
file_put_contents($local, $d);

编辑。设置返回传输,将变量放置在返回中。然后编写文件或其他操作.... - Kevin_Kinsey
在您的情况下,您可以使用fwrite()。但是,除非您使用的是非常旧的PHP版本,否则我建议您放弃fopen、fclose和fwrite,直接使用file_put_contents()。 - Kevin_Kinsey
$remote = 'sftp://var/www/test.txt'; 也不是有效的。 - Kevin_Kinsey
$remote = 'sftp://username@hostname.tld/path/to/file.txt'; $remote = 'sftp://用户名@主机名.tld/文件路径/file.txt'; - Kevin_Kinsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接