重命名没有原始名称的文件

时间:2014-12-05 08:11:27

标签: php html image-uploading file-rename

使用单个输入上传多个文件并重命名,一切正常

我尝试重命名,所以我使用$newname = md5(rand() * time());并且工作正常我希望文件重命名而没有原始名称

CODE

if (isset($_FILES['files'])) {
    $errors = array();
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $file_name = $key . $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        if ($file_size > 2097152000) {
            $errors[] = 'File size must be less than 2 MB';
        }
        $desired_dir = "user_data/";
        if (empty($errors) == true) {
            if (is_dir($desired_dir) == false) {
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if (is_dir("$desired_dir/" . $file_name) == false) {
                move_uploaded_file($file_tmp, "$desired_dir/" . $newname . $file_name);
            } else {                                  // rename the file if another one exist
                $new_dir = "$desired_dir/" . $newname . $file_name;
                rename($file_tmp, $new_dir);
            }
        } else {
            print_r($errors);
        }
    }

此代码可以正常工作,输出文件保存为26c73b3b8da05352340ad62a913fa26601uploadingfile.jpg

我需要的是 26c73b3b8da05352340ad62a913fa26601.jpg我只想跳过原始文件名

输出:

$file1 = isset($_FILES['files']['name'][0]) ? $_FILES['files']['name'][0] : null;
$file2 = isset($_FILES['files']['name'][1]) ? $_FILES['files']['name'][1] : null;
$file3 = isset($_FILES['files']['name'][2]) ? $_FILES['files']['name'][2] : null;
$file4 = isset($_FILES['files']['name'][3]) ? $_FILES['files']['name'][3] : null;
$file5 = isset($_FILES['files']['name'][4]) ? $_FILES['files']['name'][4] : null;

4 个答案:

答案 0 :(得分:4)

您可以通过这种方式获得文件扩展名

 $path = pathinfo($filename);
 // this is how you remove the original filename and keep the extension
 $newname = md5(rand() * time()) . '.' . $path['extension'];

这是您的代码编辑

  if (isset($_FILES['files'])) {
      $errors = array();
      foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
          $file_name = $key . $_FILES['files']['name'][$key];
          /// file parts
          $path = pathinfo($file_name);
          /// extenstion
          $ext = $path['extension'];
          // this is how you remove the original filename and keep the extension (overwrite $file_name)
          $file_name = md5(rand() * time()) .'.'. $path['extension'];

          $file_size = $_FILES['files']['size'][$key];
          $file_tmp = $_FILES['files']['tmp_name'][$key];
          $file_type = $_FILES['files']['type'][$key];
          if ($file_size > 2097152000) {
              $errors[] = 'File size must be less than 2 MB';
          }
          $desired_dir = "user_data/";
          if (empty($errors) == true) {
              if (is_dir($desired_dir) == false) {
                  mkdir("$desired_dir", 0700);        // Create directory if it does not exist
              }
              if (is_dir("$desired_dir/" . $file_name) == false) {
                  move_uploaded_file($file_tmp, "$desired_dir/" . $file_name);
              } else {                                  // rename the file if another one exist
                  $new_dir = "$desired_dir/" . $file_name;
                  rename($file_tmp, $new_dir);
              }
          } else {
              print_r($errors);
          }
      }      

  }
?>

答案 1 :(得分:1)

您可以使用

$renamed_file_name = $newname.orginal name. $extension;

str_replace('original_file_name', '', $renamed_file_name);

它将用空白替换原始文件名,您将获得没有原始文件名的文件名

答案 2 :(得分:0)

<?php
if (isset($_FILES['files'])) {
    $uploadedFiles = array();
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $errors = array();
        $file_name = md5(uniqid("") . time());
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];

        if($file_type == "image/gif"){
            $sExt = ".gif";
        } elseif($file_type == "image/jpeg" || $file_type == "image/pjpeg"){
            $sExt = ".jpg";
        } elseif($file_type == "image/png" || $file_type == "image/x-png"){
            $sExt = ".png";
        }
        if (!in_array($sExt, array('.gif','.jpg','.png'))) {
            $errors[] = "Image types alowed are (.gif, .jpg, .png) only!";
        }
        if ($file_size > 2097152000) {
            $errors[] = 'File size must be less than 2 MB';
        }
        $desired_dir = "user_data/";
        if (empty($errors)) {
            if (is_dir($desired_dir) == false) {
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if (move_uploaded_file($file_tmp, "$desired_dir/" . $file_name . $sExt)) {
                $uploadedFiles[$key] = array($file_name . $sExt, 1);
            } else {
                echo "Couldn't upload file " . $_FILES['files']['name'][$key];
                $uploadedFiles[$key] = array($_FILES['files']['name'][$key], 0);
            }
        } else {
            print_r($errors);
        }
    }

    foreach ($uploadedFiles as $key => $row) {
        if (!empty($row[1])) {
            $codestr = '$file' . ($key+1) . ' = $row[0];';
            eval ($codestr);
        } else {
            $codestr = '$file' . ($key+1) . ' = NULL;';
            eval ($codestr);
        }
    }
}

echo $file1;
echo $file2;
echo $file3;
echo $file4;
echo $file5;
?>

答案 3 :(得分:0)

你可以尝试在名称和扩展名的两部分中分解tmp文件,然后在给出新名称时如time()。$ ext

抱歉,目前无法提供更多信息,因为即时消息与移动应用程序但我明天会发布。