简体   繁体   中英

i can't rename uploaded file name

<?php

ini_set('post_max_size', '40M');
ini_set('upload_max_filesize', '40M');

$filename = $_FILES['file']['name'];
$filesize = $_FILES['file']['size'];
$tmpname = $_FILES['file']['tmp_name'];
$filetype = $_FILES['file']['type'];
$folder = "uploads/";
$f_folder = $folder.$f_filename;
$date = date("d/m/Y H:i");
$f_filename = rename($filename,$filename.$date);


if (isset($_POST['do']) and $_POST['do'] == 'upload') {
    if (empty($filename)) {
        echo "choose file please";
    } else {
        move_uploaded_file($tmpname,$f_folder);
        echo "file is uploaded in ".$f_folder;
    }
};

echo "
<form action='upload.php' method='post' enctype='multipart/form-data' >

File Path : <input type='file' name='file' />
<br>
<input type='submit' name='do' value='upload' />

</form>
";

?>

any var start with f_ this means that is it the final result errors :

Warning: rename(aaaaa.PNG,aaaaa.PNG28/06/2015 12:45) [function.rename]: No such file or directory in (php file dir) on line 13

Warning: move_uploaded_file(uploads/) [function.move-uploaded-file]: failed to open stream: Permission denied in (php file dir) on line 20

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\\Windows\\TEMP\\php4A5B.tmp' to 'uploads/' in (php file dir) on line 20 file is uploaded in uploads/

This is your correct code. You can rename your file in the move moment.

<?php
ini_set('post_max_size', '40M');
ini_set('upload_max_filesize', '40M');

if (isset($_POST['do']) and $_POST['do'] == 'upload') {
  $filename = $_FILES['file']['name'];
  $filesize = $_FILES['file']['size'];
  $tmp_name = $_FILES['file']['tmp_name'];
  $file_type = $_FILES['file']['type'];
  $date = date("d-m-Y_H-i");
  $temp = explode(".", $filename);
  $new_filename = $temp[0] . '-' . $date . '.' . end($temp);
  $f_folder = "uploads" . DIRECTORY_SEPARATOR . $new_filename;

  if (empty($filename)) {
      echo "choose file please";
  } else {
      move_uploaded_file($tmp_name, $f_folder);
      echo "file is uploaded in " . $f_folder;
  }
};

 echo "
 <form method='post' enctype='multipart/form-data' >
  File Path : <input type='file' name='file' />
  <br>
  <input type='submit' name='do' value='upload' />
  </form>";
?>

Your code is broken. You can't get any variables from $_FILES before user has submitted the form and value of $_POST["do"] (submit) is always "upload". Some hosting companies don't allow you to use move_uploaded_file() , but no worries, you can use rename() instead. Move the file first and then rename it, using rename() for both. And you shouldn't just set the file size to a variable without doing anything with it, you should check it as well, to avoid just denying too big file without telling user anything.

<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
    $filename = $_FILES['file']['name'];
    $filesize = $_FILES['file']['size'];
    if($filesize > 41943040){
        echo "File too large(max. 40MB)";
    } 
    elseif(empty($filename)){
        echo "choose file please";
    }
    else{
        $tmpname = $_FILES['file']['tmp_name'];
        $folder = "uploads/";
        $date = date("d-m-Y H:i");
        $f_filename = $filename. pathinfo($filename, PATHINFO_FILENAME) . $date . pathinfo($filename, PATHINFO_EXTENSION);
        $f_folder = $folder . rename($tmpname,$f_folder);
        echo "File was uploaded to " . $f_folder;
    }
}
?>
<form action='upload.php' method='post' enctype='multipart/form-data' >
File Path : <input type='file' name='file' />
<br>
<input type='submit' name='do' value='Upload' />
</form>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM