【问题标题】:On upload copy image and move to a different folder在上传复制图像并移动到不同的文件夹
【发布时间】:2015-06-08 15:49:22
【问题描述】:

我目前正在使用以下方法将图像上传到文件夹中,但我发现出于我的特定目的,我需要在上传图像时复制图像并将其添加到目录中稍高一点的文件夹中。

示例:图像文件被上传到 /folder/folder/images,这很好。我在那里需要它。但是,我在这里还需要具有相同文件名的相同文件的副本:/folder/images

这是我用来上传图片的 PHP。上传新图片时,如何修改它以复制并添加到其他文件夹?

<?php
  // A list of permitted file extensions
  $allowed = array('png', 'jpg', 'gif','zip');

  if(isset($_FILES['file']) && $_FILES['file']['error'] == 0){

  $extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

  if(!in_array(strtolower($extension), $allowed)){
  echo '{"status":"error"}';
  exit;
}

  if(move_uploaded_file($_FILES['file']['tmp_name'],
  'images/'.$_FILES['file']['name'])){
  $tmp='images/'.$_FILES['file']['name'];
  echo 'images/'.$_FILES['file']['name'];
  //echo '{"status":"success"}';
  exit;
  }
}

echo '{"status":"error"}';
exit;
?>

更新

这是让我工作的代码:

<?php
  // A list of permitted file extensions
  $allowed = array('png', 'jpg', 'gif','zip');

  if(isset($_FILES['file']) && $_FILES['file']['error'] == 0){

  $extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

  if(!in_array(strtolower($extension), $allowed)){
  echo '{"status":"error"}';
  exit;
 }

  if(move_uploaded_file($_FILES['file']['tmp_name'],'images/'.$_FILES['file']['name'])){
   $tmp='images/'.$_FILES['file']['name'];
   $new = '../images/'.$_FILES['file']['name']; //adapt path to your needs;
   if(copy($tmp,$new)){
     echo 'images/'.$_FILES['file']['name'];
   //echo '{"status":"success"}';
  }
  exit;
 }
}

echo '{"status":"error"}';
exit;
?>

【问题讨论】:

  • 为什么不在第一次执行后再次重复if(move_uploaded_file)(第一次使用 copy() 并移动第二次?)?
  • 听起来好像可行,没想到……我试试
  • 如果您需要我将其作为整个代码的解决方案,请告诉我。
  • 那会很有帮助...谢谢
  • 是的,这真的很容易做到。

标签: php image


【解决方案1】:

根据您问题的 cmets:

if(move_uploaded_file($_FILES['file']['tmp_name'],'images/'.$_FILES['file']['name'])){
    $tmp='images/'.$_FILES['file']['name'];
    $new = 'newFolder/'.$_FILES['file']['name']; //adapt path to your needs;
    if(copy($tmp,$new)){
        echo 'images/'.$_FILES['file']['name'];
        //echo '{"status":"success"}';
    }
    exit;
}

【讨论】:

  • 现在检查。我更新了缺少 / 的 $new 定义
  • 没那么多...发生了什么?你在那条线上有什么?
  • 好的 ...在第一行中,'name'的 fromt 中缺少一个括号] ...我已修复该问题,现在可以使用...谢谢!
【解决方案2】:

copy吧!

$source='folder/folder/images/imageexists.jpg';
$destination='folder/images/imagedoesnotexists.jpg';
if(!copy($source, $destination)){
    //copy failed
}

【讨论】:

  • 我不认为这会起作用,因为图像是由用户上传的,我无法知道文件名。
  • 为什么不呢,生成一个新的文件名md5(time()) 连接您从用户使用pathinfo 上传的文件中获得的扩展名
  • 您将覆盖用户文件,如果另一个用户也将使用相同的文件名上传,请参阅answer
【解决方案3】:

使用copy() 函数是个好主意。

if(move_uploaded_file($_FILES['file']['tmp_name'],
  'images/'.$_FILES['file']['name'])){
  $tmp='images/'.$_FILES['file']['name'];
  echo 'images/'.$_FILES['file']['name'];

  copy($tmp,'/folder/images/'.$_FILES['file']['name']);
  //echo '{"status":"success"}';
  exit;
  }

【讨论】:

  • 我会快速尝试一下...我想这就是我所追求的。
  • @KulerGary,确保 '/folder/images/' 是正确的完整路径。也许它必须是“文件夹/图像/”。
  • 似乎应该可以工作,只是它不断抛出 404 错误......让我认为路径不正确
  • 或者它可能在上传之前尝试复制图像
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多