PHP未重命名上载的文件

PHP未重命名上载的文件,php,Php,我正在上载一个图像,然后尝试按如下方式重命名该图像: $target_dir = "../uploads/"; $target_dir = $target_dir . basename( $_FILES["eventimage"]["name"]); $uploadOk=1; if (move_uploaded_file($_FILES["eventimage"]["tmp_name"], $target_dir)) { echo "The file ". basename( $_

我正在上载一个图像,然后尝试按如下方式重命名该图像:

$target_dir = "../uploads/";
$target_dir = $target_dir . basename( $_FILES["eventimage"]["name"]);
$uploadOk=1;


  if (move_uploaded_file($_FILES["eventimage"]["tmp_name"], $target_dir)) {

  echo "The file ". basename( $_FILES["eventimage"]["name"]). " has been uploaded.";

} else {

  echo "Sorry, there was an error uploading your file.";

}

//Now rename
$new_name_here = 'file_' . rand(0, 10000) . '.' . end(explode(".", $_FILES["eventimage"]["name"]));
move_uploaded_file($_FILES["eventimage"]["tmp_name"], "../uploads/" . $new_name_here);
问题是图像现在正在重命名

我在错误的地方做这件事

我如何才能让它工作?

您的代码中有两个对的调用,但每个上载的文件只能使用一次

使用
move\u uploaded\u file()
将临时/上传的文件设置为“permenant”后,您将需要开始使用

但是,我建议在通过
move\u uploaded\u file()
移动原始文件时,不要使用原始文件的名称,因为恶意用户很容易在其中伪造一些令人讨厌的东西。相反,尝试使用第二步使用的随机性来替换第一步:

$target_dir = "../uploads/";
$target_file = $target_dir . 'file_' . rand(0, 10000) . '.' . end(explode(".", $_FILES["eventimage"]["name"]));

if (move_uploaded_file($_FILES["eventimage"]["tmp_name"], $target_file)) {
  echo "The file ". htmlentities(basename( $_FILES["eventimage"]["name"])) . " has been uploaded.";
} else {
  echo "Sorry, there was an error uploading your file.";
}
旁注:在输出用户提供的文件名时,我还抛出了对的调用;没有它,您将面临跨站点脚本(XSS)漏洞