【问题标题】:auto increment number within filename文件名中的自动递增编号
【发布时间】:2017-04-21 08:18:40
【问题描述】:

我的用户可以上传个人资料图片,一张一张,但频率不限。

假设用户 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!";
}

?>

这个 uniqid() 需要替换,因为以后以正确的顺序查找图像是一场噩梦。

我希望图像 - 上传后 - 看起来像这样:

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...

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

【问题讨论】:

  • 为什么不使用时间戳之类的东西呢? $fileName = 'user_id_#1#_profilepic_#' . time() . '#.' . $fileData['extension'];
  • 因为我一开始并不知道这个选项,但现在我想知道当我想显示不同的图片时我怎么可能读出这个名字?如果我的文件名中有一个自动递增数字,我可以从最高数字开始,然后在点击时移动到较低的数字。但是,如果文件名中涉及时间,那将不起作用,对吗?
  • $users_files = glob('user_id_#1#_profilepic_#*.*');
  • 这给了我用户 1 的所有个人资料图片,我猜?但是我怎样才能得到一张特定的图片,比如说那个集合的“最新”图片?
  • sort() 他们的名字,最后一个?如果你有 1,2,3 等,你会这样做......

标签: php upload rename filenames auto-increment


【解决方案1】:

您可以按目录中的文件编号递增(如果您的用户可以删除他的图片,则不推荐):

$total_files = count(glob("./*",GLOB_BRACE)); // count files in directory
echo $total_files;

或者:

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

例如: 您的用户上传文件: 获取文本文件中的当前号码 -> 添加+1并用这个号码重命名文件 -> 在txt文件中记录新号码。

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

希望对你有所帮助。

祝你有美好的一天!

【讨论】:

  • 谢谢,我想过,但你已经提到了:如果用户删除一个文件,整个数字系统将在下一次上传时被破坏。这就是为什么我不能使用它。我今天早些时候读到了关于 text-thingything 的内容,但这意味着我需要为每个用户和每种图片类型(个人资料图片、博客图片、帖子图片等)创建一个新文件,对吧?这对我来说似乎也不是最聪明的方法。
  • 也许你可以使用"count(glob(..."系统并检查该名称是否已经与php.net/manual/en/function.scandir.php">scandir()</a>函数一起使用。
  • 对不起我之前的评论,这是我第一次使用stackoverflow,我还不知道如何使用文本格式^^
  • 别担心,但您的链接不准确@x2aces
  • 但我想我会选择数据库解决方案。实际上,如果我使用数据库,我将使用唯一 ID 将图像保存在我的服务器上,并且我将文件的名称存储在具有自动增量 ID 的数据库中,以及更多属性,如用户 ID 和东西。所以我可以从数据库中获取确切的链接,甚至可以更改该链接,因为它们具有唯一的自动增量 ID。不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 2016-07-26
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多