从远程服务器复制多个图像

时间:2014-03-05 18:21:47

标签: php

我正在尝试将多个图像从远程主机(使用URL)复制到我的本地盒子(使用我本地盒子上的XAMPP来执行脚本)。

我正在使用copy()。当我去执行copy()时,只创建了数组中的最后一个图像。因此,如果我有5个图像链接,则只创建第5个图像,甚至没有任何事先创建文件。

我已经尝试了CURLFOpen,然后创建了所有文件,但所有文件都是空白的,除了最后一个完全正常的文件。

$txt_file = file_get_contents('urls_for_images.txt');
if(!empty($txt_file)){
   $image_links = explode("\n", $txt_file);

   $i = 1;     
   foreach($image_links as $image_link){
     $file_info = pathinfo($image_link);
     copy($image_link, 'images/00' . $i . '_original.' . $file_info['extension']);
     $i++;
   }
}

我不确定问题出在哪里,但我觉得它会复制文本文件中的最后一张图片,而不是其他任何一张图像。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

i变量永远不会改变,因此代码会反复尝试复制同名文件,只保存最后一个文件。
尝试以这种方式修改代码:

$txt_file = file_get_contents('urls_for_images.txt');

if(!empty($txt_file)){
   $image_links = explode("\n", $txt_file);

   $i = 1;
   foreach($image_links as $image_link){
      $file_info = pathinfo($image_link);
      copy($image_link, 'images/00' . $i . '_original.' . $file_info['extension']);
      $i++;
   }
}

答案 1 :(得分:0)

只有file()才会更好,它会自动将文件读入数组:

$files = file('urls_for_images.txt', FILE_IGNORE_NEW_LINES);
foreach($files as $remote_file) {
   $local_file = ....;
   copy($remote_file, $local_file);
}

答案 2 :(得分:0)

问题是文本文件的哪些行结尾为\r\n,并且您只使用\n进行爆炸。解决此问题的最快方法是explode \r\n;或trim使用默认参数从每行末尾删除\r

   foreach($image_links as $image_link){
     $image_link = trim($image_link);
     $file_info = pathinfo($image_link);
     ...
   }

但是,最简单的方法是使用file function,它会自动处理行结尾。我建议你使用这种方法。