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

时间:2015-04-16 01:18:25

标签: php file-upload

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

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

我需要将正在上传的文件重命名为自动增量整数。因此,上传的第一个文件将为1.file_extention,然后下一个文件将为2.file_extention,因此......

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

如果你真的开始使用增量数字(可能不是最好的方法),你将无论如何都要在数据库中映射这些文件,为什么不首先插入db(我假设你的表有一个自动-increment id field)然后使用你插入的行中的id字段作为文件名?

需要注意的是,如果使用db中的id重命名文件由于某种原因失败,则您需要删除该行,但是,只要您使用这样的映射,您就需要采取这种照顾。

答案 1 :(得分:0)

您可以使用以下方法

为时间戳添加前缀
<?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连接,则必须稍微修改。