我在我的网站上有一个带有图片上传的提交讨论表单。现在,我想在用户提交他们的图片时上传一个唯一的文件名,这样我就可以展示所有图片的结果并避免重复的文件名。
我该如何用php实现这个功能?如果需要我的表单处理代码,我可以上传它。
我在我的网站上有一个带有图片上传的提交讨论表单。现在,我想在用户提交他们的图片时上传一个唯一的文件名,这样我就可以展示所有图片的结果并避免重复的文件名。
我该如何用php实现这个功能?如果需要我的表单处理代码,我可以上传它。
uniqid()
函数生成一个唯一的 ID。/**
* Generate a unique ID
* @link http://www.php.net/manual/en/function.uniqid.php
* @param prefix string[optional] <p>
* Can be useful, for instance, if you generate identifiers
* simultaneously on several hosts that might happen to generate the
* identifier at the same microsecond.
* </p>
* <p>
* With an empty prefix, the returned string will
* be 13 characters long. If more_entropy is
* true, it will be 23 characters.
* </p>
* @param more_entropy bool[optional] <p>
* If set to true, uniqid will add additional
* entropy (using the combined linear congruential generator) at the end
* of the return value, which should make the results more unique.
* </p>
* @return string the unique identifier, as a string.
*/
function uniqid ($prefix = null, $more_entropy = null) {}
你可以在日期中使用时间戳,这样你就不会得到相同的文件名/时间了。
不确定你的代码是什么样子的,但你可以像这样做:
$filename = uniqid() . $orig_filename;
阅读关于uniqid的PHP文档以获取更多信息。它使用日期时间来输出一个唯一标识符字符串。uniqid
。$filename = uniqid() . '.jpeg';
请注意,虽然UUID在一台机器上是唯一的,但如果您在两台不同的计算机上同时运行,则可能生成相同的UUID。
在我看来,最好的选择是使用sha1_file。它将根据文件内容创建唯一的哈希值。只有当它是相同的图像或哈希碰撞时才会发生冲突,这是2^160中的1次机会。通过这种方式,您可以避免重复的图像,但由于您正在从文件中创建哈希,因此可能会变慢。
$filename = sha1_file($upload_file) . $ext;
注意:如果PHP无法在指定的dir参数中创建文件,则会退回到系统默认值。
基本示例:
$filename = tempnam($dir, $prefix);
unlink($filename)//we don't need the tempfile just the name
还要注意:如果您更改文件名,它可能不是唯一的。
我认为最简单的方法是将图像名称存储在数据库字段中,然后在用户上传图像时通过检查现有文件名来验证文件名是否唯一。如果您不希望用户等待表单提交后才能获得错误或提示更改文件名,则可以使用ajax / jquery接口。
uniqid()
为永久文件命名,并使用move_uploaded_file()
进行上传。 - Michael Berkowski