PHP复制功能在foreach循环中不起作用

时间:2018-02-20 15:42:41

标签: php xml copy

我正在尝试使用xml文件将远程图片复制到本地文件夹中。 XML文件如下;

<?xml version="1.0" encoding="UTF-8"?>
<items> 
   <item>
     <image>
       http://www.example.com/image.jpg,
       https://www.example.com/image2.jpg
     </image> 
    </item> 
 </items>

使用html表单上传文件后。我将图像插入到一个数组中,之后在foreach循环中使用该数组使用php copy函数从远程url复制到本地文件夹。代码如下:

$xml = simplexml_load_file($_FILES['file']['tmp_name']) or die("Error: Cannot create object");
foreach ($xml->children() as $row) {
  $images = explode(',', $row->images);

  foreach ($images as  $image) { 
   copy($image, 'images/properties/'.$property_id.'/'.uniqid().'.jpg');
  }
}

使用上面的代码不起作用,但如果我在复制功能内硬编码图像,则会复制图像。见下面的代码;

<?php 
  $images = explode(',', $row->images);
  foreach ($images as  $image) { 
    copy('https://www.example.com/image2.jpg', 'images/properties/'.$property_id.'/'.uniqid().'.jpg');
  }
?>

所以问题是复制功能不适用于变量。我试图将变量包装在单引号和双引号中,但仍然没有用。

任何人都可以告诉我原因吗?

1 个答案:

答案 0 :(得分:0)

在&#34;爆炸&#34;之后,您的图像名称中有一些空格/换行符。你的字符串。 copy()功能无法使用之前的空格。您可以使用trim()删除它们。

foreach ($images as  $image) { 
    copy(trim($image), 'images/properties/'.$property_id.'/'.uniqid().'.jpg');
}

然后,您必须从XML获取数据:

foreach ($xml->item->image as $row) {
    $images = explode(',', (string)$row);
    $images = array_map('trim', $images); // trim your names (so the code above is no longer required.
}