2012-04-29 18 views
1

Curlを使用してFTPサーバーからファイルをダウンロードしようとしています。私は私のブラウザにURLを貼り付けることができ、それは正常にダウンロードされます。問題は、CurlとPHPでは、FTPサーバーがリダイレクトを実行していて、Curlがフォローしないと考えていることです。 「サーバーが指定されたディレクトリに変更することを拒否しました」というエラーメッセージが表示されます。Curl with PHPを使用してFTPからファイルをダウンロード

EDIT:コードに%2fがあり、削除されました。それは以前のテストからのものです。

私のコードは次のとおりです。

$curl = curl_init(); 
$file = fopen("temp.zip", 'w'); 
curl_setopt($curl, CURLOPT_URL, "ftp://idx.living.net/idx_fl_ftp_down/idx_naples_dn/naples_data.zip"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_setopt($curl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_SSL); 
curl_setopt($curl, CURLOPT_USERPWD, "myusername:mypassword"); 
curl_exec($curl); 
echo curl_error($curl); 

ファイルをダウンロードする際に、ブラウザが行うように動作するためにカールを強制する方法?

+0

FTPサーバーがリダイレクトを行うことができると聞いたことはありません。これは通常、FTPプロトコルではなくHTTPプロトコルの機能です。 – hakre

+0

私は、FTPプロトコルにHTTPのようなリダイレクト応答がないと思います。これはおそらくあなたの問題ではありません。 wiresharkでftp接続を盗聴して、何が起こっているのかを正確に確認してください。 –

+0

パスの '/%2fidx_fl_ftp_down /'部分は有効ですか? '/ idx_fl_ftp_down /'だけではないのでしょうか? '%2f'は'/'のURLエンコーディングです。私はそれが無効/存在しないディレクトリに変更しようとしている可能性があると思う。 – drew010

答えて

0

私はこれがあなたの質問に(カールを使って)答えるべきではないことを知っています。 しかし、phpを使ってftpサーバにファイルをダウンロードするカールコードはありません。

$local_file = 'output.rar'; 
$server_file = '/somedir/1/bar/foo/somearchive.rar'; 
$ftp_user_name='some_login'; 
$ftp_user_pass='Password'; 
$ftp_server='HOST'; 
// set up basic connection 
$conn_id = ftp_ssl_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

/* uncomment if you need to change directories 
if (ftp_chdir($conn_id, "<directory>")) { 
    echo "Current directory is now: " . ftp_pwd($conn_id) . "\n"; 
} else { 
    echo "Couldn't change directory\n"; 
} 
*/ 

// try to download $server_file and save to $local_file 
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { 
    echo "Successfully written to $local_file\n"; 
} else { 
    echo "There was a problem\n"; 
} 

// close the connection 
ftp_close($conn_id); 

注:

  1. ftp_ssl_connectは()SFTPを使用するためのものではありません。 PHPでsFTPを使用するには、ssh2_sftp()を参照してください。
  2. FTPサーバーのアドレスパラメーターの末尾にスラッシュを使用しないでください。ftp://の先頭には使用しないでください。