【发布时间】: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