2016-12-06 56 views
0

我的用户可以一个接一个地上传个人资料图片,但是他们可以随意上传个人资料图片。文件名中的自动增量编号

假设用户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... 

我怎样才能做到这一点?到目前为止我还没有任何想法。

+0

为什么不使用类似时间戳的东西呢? '$ fileName ='user_id_#1#_profilepic_#'。时间() 。 '#'。 。 $ fileData ['extension'];' – AbraCadaver

+0

,因为我并不知道这个选项,但现在我想知道当我想显示不同的图片时,我怎么可能读出这个名字? 如果我在我的文件名中有一个自动增量编号,我可以从最高的数字开始,并在点击时移动到较低的数字。但是,如果有一段时间涉及到文件名,那就行不通了,对吗? – Maxischl

+1

'$ users_files = glob('user_id_#1#_profilepic _#*。*');' – AbraCadaver

回答

0

您可以通过文件数量目录增加(不推荐,如果你的用户可以删除他的照片):

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

OR:

使用,你记录数的文本文件。

对于为例: 您用户上传文件: 获取文本文件中的当前号码 - >添加+1和重命名这个编号的文件 - >记录在TXT文件中的新号码。

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

我希望能帮到你。

祝您有美好的一天!

+0

谢谢,我想过,但你已经提到它:如果用户删除一个文件,系统将在下次上传时被销毁。这就是为什么我不能使用它.. 我今天早些时候阅读了关于文本thingything,但这意味着我需要为每个用户和每个图片类型(配置文件图片,博客图片,张贴图片等)创建一个新文件,对?这对我来说似乎也不是最聪明的方式。 – Maxischl

+0

也许你可以使用“count(glob(...)”系统,并检查这个名字是否已经用于scandir()函数。 – x2aces

+0

对不起,我以前的评论,这是我第一次在stackoverflow,我还不知道如何使用文本格式^^ – x2aces