Php 文件名中的自动递增数字

Php 文件名中的自动递增数字,php,upload,rename,filenames,auto-increment,Php,Upload,Rename,Filenames,Auto Increment,我的用户可以一个接一个地上传个人资料图片,但可以根据需要随时上传 假设用户1上传了一个图像,这段代码将把它存储到我的上传文件夹中: <?php $fileData = pathinfo(basename($_FILES["fileToUpload"]["name"])); $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; $target_path = "uploads/

我的用户可以一个接一个地上传个人资料图片,但可以根据需要随时上传

假设用户1上传了一个图像,这段代码将把它存储到我的上传文件夹中:

<?php

$fileData = pathinfo(basename($_FILES["fileToUpload"]["name"]));

$fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension'];

$target_path = "uploads/" . $fileName;

while(file_exists($target_path)) {
    $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension'];
    $target_path = ($_SERVER['DOCUMENT_ROOT'] . "uploads/" . $fileName);
}

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_path)) {

    echo "The image was successfully uploaded. <a href='index.php'>Add another image</a>";
}
else {
    echo "There was an error uploading the file, please try again!";
}

?>

我该怎么做?到目前为止,我没有任何想法。

您可以按目录中的文件号递增(如果您的用户可以删除其图片,则不建议):

或:

使用记录数字的文本文件。

例如: 您需要用户上传一个文件: 获取文本文件中的当前编号->添加+1并使用此编号重命名文件->在txt文件中记录新编号

最好的方法应该是从数据库记录中获得一个唯一的ID,但您可能不使用DB

我希望这对你有帮助


祝你今天愉快

您可以按目录中的文件号递增(如果您的用户可以删除其图片,则不建议):

或:

使用记录数字的文本文件。

例如: 您需要用户上传一个文件: 获取文本文件中的当前编号->添加+1并使用此编号重命名文件->在txt文件中记录新编号

最好的方法应该是从数据库记录中获得一个唯一的ID,但您可能不使用DB

我希望这对你有帮助


祝你今天愉快

为什么不使用时间戳之类的东西呢<代码>$fileName='user_id_35;1#u profilepic_35;'。时间()$fileData['extension']因为我一开始不知道这个选项,但现在我想知道,当我想显示不同的图片时,我怎么可能读出这个名称?如果我的文件名中有一个自动递增的数字,我可以从最高的数字开始,然后单击移动到较低的数字。但是,如果文件名中涉及到时间,那就行不通了,对吗?
users\u files=glob('user\u id\u35; 1\u profilepic\u35;*)
我想这会把用户1的所有个人资料图片都还给我?但是,我如何才能获得该系列的特定图片,比如说“最新”的图片?
sort()
按名称对它们进行排序,然后取最后一张?如果你有1,2,3等等,你也会这么做。为什么不使用时间戳之类的东西呢<代码>$fileName='user_id_35;1#u profilepic_35;'。时间()$fileData['extension']因为我一开始不知道这个选项,但现在我想知道,当我想显示不同的图片时,我怎么可能读出这个名称?如果我的文件名中有一个自动递增的数字,我可以从最高的数字开始,然后单击移动到较低的数字。但是,如果文件名中涉及到时间,那就行不通了,对吗?
users\u files=glob('user\u id\u35; 1\u profilepic\u35;*)
我想这会把用户1的所有个人资料图片都还给我?但是,我如何才能获得该系列的特定图片,比如说“最新”的图片?
sort()
按名称对它们进行排序,然后取最后一张?如果你有1,2,3等等,你也会这么做。谢谢,我考虑过了,但你已经提到了:如果用户删除了一个文件,整个数字系统将在下次上传时被销毁。这就是为什么我不能用它。。今天早些时候我读到了文本内容,但这意味着我需要为每个用户和每种图片类型(个人资料图片、博客图片、帖子图片等)创建一个新文件,对吗?对我来说,这似乎也不是最聪明的方法。也许你可以使用“count(glob(…)”系统,检查这个名称是否已经用于php.net/manual/en/function.scandir.php“>scandir()函数。很抱歉我之前的评论,这是我第一次使用stackoverflow,我还不知道如何使用文本格式^^^不用担心,但是你的链接不准确@x2acesb,但我想我会使用数据库解决方案。实际上,如果我使用数据库,我会使用唯一的ID将图像保存在我的服务器上,并且我会存储数据库中的文件有一个自动递增id,还有一些其他属性,比如用户id等等。这样我就可以从数据库中获得准确的链接,甚至可以更改链接,因为它们有一个唯一的自动递增id。很好。谢谢,我想了一下,但你已经提到了:如果用户删除了一个文件,整个数字系统将被删除尝试下一次上传。这就是为什么我不能使用它。我今天早些时候读到了关于文本的东西,但这意味着我需要为每个用户和每种图片类型(个人资料图片、博客图片、帖子图片等)创建一个新文件,对吗?对我来说,这似乎不是最明智的方式。也许你可以使用“计数(全局(。。。“系统并检查该名称是否已用于php.net/manual/en/function.scandir.php”>scandir()函数。很抱歉我之前的评论,这是我第一次使用stackoverflow,我还不知道如何使用文本格式^^^不用担心,但是你的链接不准确@x2acesb,但我想我会使用数据库解决方案。实际上,如果我使用数据库,我会使用唯一的ID将图像保存在我的服务器上,并且我会存储数据库中的文件有一个自动递增id,还有一些属性,比如用户id和其他东西。这样我就可以从数据库中获得确切的链接,甚至可以更改链接,因为它们有一个唯一的自动递增id。很好。
user_id_#1#_profilepic_#1#.jpg
user_id_#1#_profilepic_#2#.jpg
user_id_#1#_profilepic_#3#.png
user_id_#1#_profilepic_#4#.gif
user_id_#1#_profilepic_#5#.jpg
and so on...
$total_files = count(glob("./*",GLOB_BRACE)); // count files in directory
echo $total_files;