主要目标是每次上传唯一file_name
的文件。此文件将位于我们的网络服务器上,file_path
将映射到我们的数据库。然后它将显示在存储在数据库中的文件路径的帖子上。
我正在使用此处的代码(http://www.w3schools.com/php/php_file_upload.asp)
我需要将正在上传的文件重命名为自动增量整数。因此,上传的第一个文件将为1.file_extention
,然后下一个文件将为2.file_extention
,因此......
最好的方法是什么?
答案 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连接,则必须稍微修改。