5

CLIで実行することを目的としたphpスクリプトを作成しています。これは、ftpサーバーにファイルをダウンロードするのに役立ちます。何が悪いのかを正確に説明しますが、その前に、コンテキストについて説明します。

オールディーズゲームの画像ファイルを共有しているウェブサイトに登録しています。このサイトでファイルをダウンロードする場合は、ダウンロードリンクを取得するためにログに記録する必要があります。次に、与えられたリンクはFTPダウンロードリンクです。

Wiresharkを使用してFTP接続パケットのキャプチャを作成し、失敗したスクリプト化されたFTP転送と比較しました。

したがって、..FTPサーバーは匿名接続を受け入れます。ブラウザを使用してファイルをダウンロードすると、ファイルのリンクは次のようになります。

ftp://website.url/somefolder/1/foo/bar/SOMEOLDIE.rar

ここで、FileZillaを使用してこのFTPに接続し、匿名ログインでアクセスすると、いくつかのフォルダーが表示されますが、isoが必要な「somefolder」に移動すると、フォルダーは空になります。

この画像を見て、コードを表示します。 ここに画像の説明を入力してください 今コード;

function download_file($url){
    echo "Downloading: ".$url;
    $ch = curl_init($url);
    $fp = fopen("data/output.rar", "w");
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'data/cookies.txt');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    //curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    //curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, "anonymous:mozilla@example.com");
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    //var_dump(curl_getinfo($ch));
    //echo curl_error($ch);
    curl_close($ch);
    fclose($fp);
}

誰かがそれを手伝ってくれますか?私はcurlに精通しておらず、必要なコマンドを正確に送信するようにcurlに指示する方法がわかりません。

ありがとうございました !

編集:これを見てください、それはまったく同じ問題です。FTPからPHPとCurlを使用してファイルをダウンロードするのに助けが必要

4

2 に答える 2

3

わかりました、わかりました:)

curlがディレクトリを変更しようとしたため、curlの代わりにftp_ *関数を使用しましたが、このftpサーバーでは許可されていないため、使用したコードは次のとおりです。

$local_file = 'output.rar';
$server_file = '/somedir/1/bar/foo/somearchive.rar';
$ftp_user_name='anonymous';
$ftp_user_pass='mozilla@example.com';
$ftp_server='server.host';
// set up basic connection
$conn_id = ftp_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);

できます !!

于 2013-01-08T12:33:08.780 に答える
1

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);
于 2013-01-08T11:46:38.517 に答える