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

这是我在等待答案时想到的。

<?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 手册页中的示例得到了这个。我也设置max_execution_time = 0(无限)。

如果有人可以证明他们的方法更有效,我很乐意将他们的答案标记为已接受。谢谢大家的答案!

于 2013-10-31T15:23:49.627 回答
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));
}

不言自明,但有一点:如果您不确定 filelist.txt 的内容,您应该清理文件名。

于 2013-10-31T14:41:40.807 回答