我如何为他们/我上传的图片创建一个自定义名称,最好我希望他们获得数字作为名称,下一张图片获得姓氏的数字+1。
<?php
$target_dir = "../image/DBFilmCover/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["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;
}
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file " . basename($_FILES["fileToUpload"]["name"]) . " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
我很感激我能得到的所有帮助,如果我没有提供足够的信息,只需询问
可以。只需根据您的需要更改target_file
:
例如:
$target_file = $target_dir . "custom name";
要计算目录中的文件数量,只需执行:
$files = scandir($target_dir);
$files_count = count($files)-2; // -2 for ignoring . and ..
现在文件名应该是:
$path = $_FILES['fileToUpload']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);
$files_count++;
$filename = $files_count.".".$ext;
$target_file = $target_dir . $filename;
因为每次运行脚本时都不知道上次运行的时间,所以需要将分配给上次上传图像的值/编号存储在某个位置。
您可以将其存储在文本文件或数据库中,然后在每次运行脚本时将其递增一。
一个更容易的"破解"可能是使用数据/时间戳,比如:
$filename = 'image_' . date('Y-m-d_H-i-s');
为了获得新图像的下一个可用编号,您可以使用以下内容:
$last_number = 1;
foreach (glob('../image/DBFilmCover/*.{png,jpg,gif}', GLOB_BRACE) as $name) {
$number = intval(pathinfo($name, PATHINFO_FILENAME), 10);
if ($number > $last_number) {
$last_number = $number;
}
}
$number++;
$ext = pathinfo($_FILES["fileToUpload"]["tmp_name"], PATHINFO_EXTENSION);
$target_file = "../image/DBFilmCover/$number.$ext";
然后继续执行move_uploaded_file
代码。
请注意,PATHINFO_FILENAME
选项是在PHP 5.2.0中添加的。
编辑:还要注意,如果多个用户可能同时上传一个文件,这种方法(以及记住文本文件或数据库中的最后一个文件名或使用时间戳作为文件名等方法)很容易出现一致性问题。为了克服这个问题,您可能还想在文件名中添加一些随机字符串。但如果你是上传的单一用户,这就不是问题。
您可以使用以下算法
- 创建txt文件并在上面保存0
- 在上传过程中获取txt文件内容和+1
- 保存新名称的文件
- 并将新值(+1)保存到txt文件中以备将来使用
您还可以将其保存在数据库上