web-dev-qa-db-ja.com

curlとphpを使用してFTPからファイルをダウンロードする

Curlとphpを使用してFTPサーバーからファイルをダウンロードしようとしていますが、役立つドキュメントが見つかりません

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,"ftp://$_FTP[server]");
curl_setopt($curl, CURLOPT_FTPLISTONLY, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec ($curl);

私はファイルのリストを得ることができますが、それはそれについてです

25
Ryan

私の推測では、あなたのURLはファイルではなくディレクトリを指していると思います。 CURLOPT_URLにファイルの完全なURLをフィードする必要があります。また、ファイルをダウンロードする場合は、どこかに保存することをお勧めします。

作業例:

$curl = curl_init();
$file = fopen("ls-lR.gz", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.sunet.se/ls-lR.gz"); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FILE, $file); #output
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
curl_exec($curl);
curl_close($curl);
fclose($file);
22
Tobias R

コミュニティの反応はわずかな調整で機能します:

CURLOPT_FILEがCURLOPT_RETURNTRANSFERの設定に依存しているためと思われ、CURLOPT_RETURNTRANSFERを設定する前にCURLOPT_FILEを設定しても機能しないようです。

このページでのjoeterranovaのコメントを引用: http://php.net/manual/fr/function.curl-setopt.php

4
Yack
  • CURLOPT_URLをファイルの完全パスに設定します。
  • CURLOPT_FTPLISTONLY行を削除します。
  • Curl_execの前に次の行を追加します。

    $file = fopen("filename_to_save_to", "w");
    curl_setopt($curl, CURLOPT_FILE, $file);
    
4
jimyi

FTP経由で接続する方法を含むCURLヘルプをここで参照してください http://www.linuxformat.co.uk/wiki/index.php/PHP_-_The_Curl_library

注:HTTPからファイルにアクセスできる場合は、リンクEG: http://Host.com/file.txt を使用し、file_get_contentsまたはファイル関数を使用することをお勧めします。

次に http://uk.php.net/file_get_contents またはその他の方法を使用して、ファイルをコンピューターにダウンロードできます。このオプションは、ダウンロードにFTPを使用するよりも優れています。上記のリンクにあるように、FTPを使用していつでもアップロードできます。

1
ToughPal
$ftp_location = put your ftp adress here; 
$location_login = put your login here;
$location_pwd = put your password here;
$conn_id = ftp_connect("$ftp_location");
$login_result = ftp_login($conn_id, $location_login, $location_pwd);

if ((!$conn_id) || (!$login_result)) {
    echo "FTP connection has failed!";
    exit;
} else {
    echo "Connected";
}

// get the file
// change products.csv to the file you want
$local = fopen("products.csv","w");
$result = ftp_fget($conn_id, $local,"products.csv", FTP_BINARY);
fwrite($local, $result); fclose($local); 

// check upload status
if (!$result) {
    echo "FTP download has failed!";
} else {
    echo "Downloaded ";    
}

// close the FTP stream
ftp_close($conn_id);
1
Smile

これらの答えをすべて試し、どれも機能しないようにした後、これが最終的に機能するようになりました。

$curl = curl_init();
$fh   = fopen("FILENAME.txt", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://{$serverInfo['username']}:{$servererInfo['password']}@{$serverInfo['server']}/{$serverInfo['file']}");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
fwrite($fh, $result);
fclose($fh);
curl_close($curl);
1
leek