1

オンラインのディレクトリに存在するファイル名のリストがあります。それらをすべてダウンロードする最良の方法は何ですか? たとえば、次のファイルを取得したいとします。

516d0f278f14d6a2fd2d99d326bed18b.jpg
b09de91688d13a1c45dda8756dadc8e6.jpg
366f737007417ea3aaafc5826aefe490.jpg

次のディレクトリから:

http://media.shopatron.com/media/mfg/10079/product_image/

多分このようなもの:

$var = filelist.txt
for ( $i in $var ) {
    wget http://media.shopatron.com/media/mfg/10079/product_image/$i
}

何か案は?

4

3 に答える 3

0
$list = file_get_contents('path/to/filelist.txt');
$files = explode("\n", $list); ## Explode around new-line.
foreach ($files as $file) {
   file_put_contents('new_filename.jpg', file_get_contents('http://url/to/file/' . $file));
}

基本的に、改行の周りでリストを展開して各行を取得file_put_contentsし、サーバーが取得元の場所からファイルをダウンロードした直後にファイルを取得します。

于 2013-10-31T14:34:17.530 に答える
0
$files = file('filelist.txt');  //this will load all lines in the file into an array            
$dest = '/tmp/';  //your destination dir
$url_base = 'http://media.shopatron.com/media/mfg/10079/product_image/';

foreach($files as $f) {
   file_put_contents($dest.$f, file_get_contents($url_base.$f));
}

かなり自明ですが、1 つのポイント: filelist.txt の内容がわからない場合は、ファイル名を消去する必要があります。

于 2013-10-31T14:41:40.807 に答える
0

答えを待っている間に私が思いついたのは次のとおりです。

<?php
$handle = @fopen("inputfile.txt", "r");
if ($handle) {
    while (($buffer = fgets($handle)) !== false) {
        exec("wget http://media.shopatron.com/media/mfg/10079/product_image/$buffer");
        echo "File ( $buffer) downloaded!<br>";
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

これは、 PHP fgets man pageの例を変更して取得しました。私も設定max_execution_time = 0(無制限)。

誰かが自分の方法がより効率的であることを証明できれば、喜んでその回答を承認済みとしてマークします。回答ありがとうございます。

于 2013-10-31T15:23:49.627 に答える