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连接,那么你需要稍微修改一下。
主要目标是每次上传具有唯一 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连接,那么你需要稍微修改一下。