重命名文件上传PHP

时间:2018-03-31 01:15:57

标签: php file-upload file-rename

我正在使用W3Schools使用PHP上传文件的例子,我知道它们在编码方面不是最好的,因为它可能已经过时而且不好等等,但我不需要任何太花哨的东西。但我想知道如何在上传时更改文件名。

W3Schools代码(略有编辑):

<?php

$username = $_POST['username'];

$target_dir = '../forum/uploads/'.strtolower($username).'/';
$target_file = $target_dir.'profile'.basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        $uploadOk = 1;
    } else {
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    unlink($target_file);
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "Profile picture updated";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

我想将名称更改为仅配置文件,现在当我使用此代码上传时,它会将文件作为配置文件上传,后跟文件名称,如下所示,profilexxxx.jpeg。

2 个答案:

答案 0 :(得分:1)

喜欢这个

$target_file = $target_dir.'profile'.basename($_FILES["fileToUpload"]["name"]);

删除

  $target_file = $target_dir.'profile'.strrchr($_FILES["fileToUpload"]["name"],'.');

但你应该亲自尝试一下。

此位strrchr($_FILES["fileToUpload"]["name"],'.');从文件名返回扩展名。因此,如果它是file.jpg,则返回.jpg,从而返回profile.jpg。我应该提到它只返回最后一个扩展名。因此,如果您有file.php.jpg,则只返回.jpg

更新

我没有看到你已经解析了扩展名,所以考虑到这一点,你可以稍微移动一下。

 $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
 $target_file = $target_dir.'profile'.'.'.$imageFileType;

无需两次。

Pathinfo - 可能是“正确的”方式。只是大多数沙箱都关闭了,所以我有点懒得去谷歌看它是否保留了.jpg.jpg(我总是忘记)。 / p>

PS这就是沙箱所说的......

  

警告:出于安全原因,在 [...] 7 < < < BR />

答案 1 :(得分:-1)

我使用它来上传文件,它工作正常。

<?php

if(isset($_POST['submit'])){
  // Retrieve file from post method
  $file = $_FILES['file'];

  // Get file properties
  $fileName = $file['name'];
  $fileTmpName = $file['tmp_name'];
  $fileSize = $file['size'];
  $fileError = $file['error'];
  $fileType = $file['type'];

  //Separate name and file extension
  $fileExt = explode('.', $fileName);
  //Set to always lowercase
  $fileActualExt = strtolower(end($fileExt));

  //Set any extension allowed
  $allowed = array('jpg','jpeg','png');

  //Check whether file extension is allowed
  if(in_array($fileActualExt, $allowed)){
      if($fileError === 0){
          //Check file size criteria
          if($fileSize <= 150000){
              $NewName = "MyNewName"; //define new file name
              //Define your custom file name
              $fileNameNew = $NewName.".".$fileActualExt;
              //Define file destination
              $fileDestination = '../images/'.$fileNameNew;
              //php uploading files
              move_uploaded_file($fileTmpName, $fileDestination);

          } else{
              echo "file is too big";
          }
      } else{
          echo "upload error";
      }
  } else{
      echo "your extension is not allowed";
  }
}
?>