我正在尝试将多个图像从远程主机(使用URL)复制到我的本地盒子(使用我本地盒子上的XAMPP来执行脚本)。
我正在使用copy()
。当我去执行copy()
时,只创建了数组中的最后一个图像。因此,如果我有5个图像链接,则只创建第5个图像,甚至没有任何事先创建文件。
我已经尝试了CURL
和FOpen
,然后创建了所有文件,但所有文件都是空白的,除了最后一个完全正常的文件。
$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++;
}
}
我不确定问题出在哪里,但我觉得它会复制文本文件中的最后一张图片,而不是其他任何一张图像。
提前感谢您的帮助!
答案 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,它会自动处理行结尾。我建议你使用这种方法。