我有一个表单,管理员将上传三张不同尺寸的图片到三个不同的指定目录。现在,为了确保不涉及重复文件名的问题,我实现了类似php的东西,它将比较上传的文件名,它将检查指定目录中是否存在该文件名,如果是,它将回显一个错误并停止脚本执行。
现在,我的一位朋友建议我,要求管理员手动重命名图片文件,并要求他们处理文件复制问题,这是非常糟糕的。他建议的解决方案是自动重命名文件,然后将其存储在数据库中,然后将其定向到目录中。
我不知道该如何组合重命名的文件,并确保它将保持唯一的文件名,更准确地说,我希望您了解我的目录结构。
就像我说的,管理员将上传三个图片文件。
( a)标题图片b)简图c)详细图片
所有这三个图片文件都将被移动到不同的目录中,比如标题图片转到标题目录等等。
我现在使用下面的脚本来移动和存储文件名和路径,在数据库中使用varchar。
$ns_pic_title_loc= $_FILES["ns_pic_title"]["tmp_name"];
$ns_pic_title_name = $_FILES["ns_pic_title"]["name"];
move_uploaded_file($ns_pic_title_loc, $ns_title_target.$ns_pic_title_name) or die(mysql_error());这就是我没有使用的示例代码,它包含了我正在使用的验证函数。我在想我想重命名所有的文件
( a)在标题目录中,应将文件存储为。title_1.jpg title_2.jpg title_3.jpg title_4.jpg
诸若此类
和其他照片的方式一样。我该怎么做?我用什么功能来实现我的目标。如果这不是重命名文件的好方法,我将非常感谢任何建议来重命名该文件。
提前感谢
发布于 2010-09-03 12:57:01
好吧,这里有一个可能的解决方案:
$_FILES["ns_pic_title"]["name"]上传文件名和单独的扩展名,或者如果我们只讨论图像文件,用getimagesize($_FILES["ns_pic_title"]["tmp_name"])获取图像类型;$file_name变量'title_'.($max_id + 1)move_uploaded_file($_FILES["ns_pic_title"]["tmp_name"], $ns_title_target.$file_name.'.'.$file_extension)也有希望这是有意义的,也是有帮助的。
发布于 2010-09-03 12:54:12
有几个好的选择有不同的利弊。
tempnam生成一个唯一的文件名。发布于 2010-09-03 12:56:40
与其用逻辑计算出最新的图片名称并计算下一个数字增量,不如直接使用PHP的tempnam()函数?它生成一个具有您选择的前缀的唯一名称(即“标题”、“简要”、“详细信息”)。您也可以简单地在文件名上加上时间戳--如果没有大量管理员同时上传图片,那么应该可以处理大多数名称冲突。
由于您的图片将被排序到title、brief和detail目录中,所以没有必要将每个图片命名为title_*、brief_*和detail_*,对吗?如果它在标题目录中,那么它显然是一个标题图片。
另外,您将把文件名放在数据库中。然后在应用程序的其他地方,当您想要显示图片时,我假设您从数据库中获得了正确的文件名。因此,只要应用程序知道在哪里找到它,实际文件名就不重要了。如果这是正确的,那么就没有必要有一个非常友好的名称,因此,使用tempnam()文件名或时间戳加上原始文件名是可以接受的。
https://stackoverflow.com/questions/3635831
复制相似问题