【问题标题】:PHP copy function not working inside foreach loopPHP复制功能在foreach循环中不起作用
【发布时间】:2018-02-20 15:42:41
【问题描述】:

我正在尝试使用 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 复制功能从远程 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');
  }
?>

所以问题是复制功能不适用于变量。我也尝试将变量用单引号和双引号括起来,但仍然没有用。

谁能告诉我为什么?

【问题讨论】:

  • 贴出解析XML文档并初始化$images的代码。从SimpleXMLElement 中提取的项目并不是它们看起来的样子。
  • 更新了帖子
  • $row 中没有images
  • 如果我在使用 explode 后回显 $images,则会显示图像 url。
  • @axiac 你说得对!你可以做一个anwser,如果你愿意,我会删除我的。 Dalyan,你在用户名前面加上@,如果没有,他们不会得到你的评论。

标签: php xml copy


【解决方案1】:

在“爆炸”字符串之后,您的图像名称中有一些空格/换行符。 copy() 函数不适用于 before URL 的额外空格。您可以使用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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多