PHP文件上传,重命名文件名

PHP file upload, rename file name

主要目标是每次上传具有唯一 file_name 的文件。该文件将位于我们的网络服务器上,file_path 将映射到我们的数据库。然后它将显示在数据库中存储的文件路径的 post 上。

我正在使用此处的代码 (http://www.w3schools.com/php/php_file_upload.asp)

我需要将正在上传的文件重命名为自动递增整数。所以上传的第一个文件将是 1.file_extention,然后下一个将是 2.file_extention,依此类推...

最好的方法是什么?

如果你真的打算使用递增数字(可能不是最好的方法)并且无论如何你都会在数据库中映射这些文件,为什么不先插入数据库(我假设你的 table 有一个自动递增的 id 字段),然后使用您插入的行中的 id 字段作为文件名?

需要注意的是,如果由于某种原因使用数据库中的 ID 重命名文件失败,您将需要删除该行,但是,无论何时使用此类映射,您都需要接受该行一种照顾。

您好,您可以使用以下方法为时间戳添加前缀

<?php
$target_dir = "uploads/";
$target_file = $target_dir . time().basename($_FILES["fileToUpload"]["name"]); // NOTICE THAT I CONCORDINATED TIME STAMP BEFORE THE FILE NAME
$uploadOk = 1;
$imageFileType = 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) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
?>

如果要协调主键,则必须先插入记录,然后再上传文件。如果文件未上传,则必须向用户发出警告,告知用户图片未上传或必须删除记录。

<?php
    require 'dbConnection.php';

    $stmt = "INSERT INTO TABLENAME (id, name, created) VALUES (NULL, '$name', NOW())";
    $qry = mysql_query($stmt);

    $lastInsertedId = mysql_insert_id();


    $target_dir = "uploads/";
    $target_file = $target_dir . $lastInsertedId.'_'.basename($_FILES["fileToUpload"]["name"]); // NOTICE THAT I CONCORDINATED TIME STAMP BEFORE THE FILE NAME
    $uploadOk = 1;
    $imageFileType = 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) {
            echo "File is an image - " . $check["mime"] . ".";
            $uploadOk = 1;
        } else {
            echo "File is not an image.";
            $uploadOk = 0;
        }
    }

?>

如果你使用的是PDO连接,那么你需要稍微修改一下。