我有一个在线目录中存在的文件名列表。下载所有内容的最佳方式是什么?例如,我想获得以下文件:
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
}
有什么想法吗?
答案 0 :(得分: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
文件。
答案 1 :(得分: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的内容,你应该清理文件名。
答案 2 :(得分: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
(无限制)。
如果有人能证明他们的方法更有效率,我很乐意将他们的答案标记为已被接受。谢谢大家的答案!