2013-06-11 3 views
-1

Я пытаюсь использовать библиотеку cURL в PHP для SFTP, чтобы получить файл с удаленного сервера, как показано ниже. Я получаю ошибку no such file exists. Любые идеи, что я делаю неправильно?Как SFTP получить файл с использованием cURL с PHP

<html> 
<body> 

<?php 
$user="username"; 
$pass="password"; 
$filename="/opt/vmstat/vmstat_file"; 
$c = curl_init("sftp://$user:[email protected]/$filename"); 
$fh = fopen($filename, 'r') or die($php_errormsg); 
curl_setopt($c, CURLOPT_PROTOCOLS, CURLPROTO_SFTP); 
curl_setopt($c, CURLOPT_FILE, $fh); 
curl_exec($c); 
curl_close($c); 

?> 

</body> 
</html> 

ошибка:

Warning: fopen(="/opt/vmstat/vmstat_file): failed to open stream: No such file or directory in C:\inetpub\wwwroot\sftp.php on line 9 
+0

Вы уверены, что sftp: // $ user: $ pass @ server1/$ filename? или, может быть, лучше, поэтому sftp: // $ pass: $ user @ server1 $ filename? – Eugen

+0

такая же ошибка. – user1471980

+2

Код не верный, как указано. Я подозреваю, что «Бритва Оккама» действует ... файл не существует. –

ответ

2
$c = curl_init("sftp://$user:[email protected]/opt/vmstat/vmstat_file"); 
curl_setopt($c, CURLOPT_PROTOCOLS, CURLPROTO_SFTP); 
$data = curl_exec($c); 
curl_close($c); 

это сработало.

+1

Вы говорите это как решение (т. Е. Больше не являетесь именем файла) или как шаг устранения неполадок (т. Е. Он работает, когда вы сами вводите имя файла)? – nhinkle

+0

Возможно, проблема заключалась в двойной косой черте в вопросительном коде. "server1 // opt/vmstat/vmstat_file"! = "server1/opt/vmstat/vmstat_file" –

0

Проверка владельца файла и права доступа. Вы делаете fopen($filename, 'w'). Вы хотите только сказать fopen($filename, 'r')?

+0

Я понял, что ошибка, изменил ее на r, все еще не получив ошибки в файле. – user1471980

+1

Является ли файл на удаленном сервере или в поле, на котором вы запускаете свой код? Fopen пытается открыть файл на локальном сервере. – ForOhFor

0

Я думаю, проблема в том, что вы открываете локальный дескриптор файла для чтения.

$fh = fopen($filename, 'r') or die($php_errormsg); 

Я принял ваш код и изменил 'r' на 'w', и он работает для меня.

Смежные вопросы