如何使file_get_contents返回唯一的结果

时间:2017-07-08 18:59:31

标签: php file-get-contents addslashes

我是php新手,想请求您从file_get_contents()返回一个独特的结果。原因是我想给每张照片一个唯一的名字,以便稍后可以删除其中一张而不是全部。

$file =addslashes(file_get_contents($_FILES['image']['tmp_name'][$key]));

不幸的是,time()和microtime()在这种情况下无济于事。

2 个答案:

答案 0 :(得分:0)

也许这会对您有所帮助:http://php.net/manual/en/function.uniqid.php

uniqid();

$ imageName = $ imageName。 '_'。 uniqid();

答案 1 :(得分:0)

为什么不直接生成内容的SHA-1并将其用作文件名(有点像git如何在存储库中存储对象loose object database)?我通常不想将blob插入RDBMS;它有点笨重,你必须确保blob字段有足够的空间来容纳你期望使用的文件大小。此外,文件系统已经过优化,可以处理文件。因此,在Web服务器具有写访问权限的服务器上保留一个特殊目录是有意义的。然后在那里编写文件并在数据库中存储对它们的引用。这是一个例子:

// Read the contents of the file and create a SHA-1 hash signature.
$tmpPath = $_FILES['image']['tmp_name'];
$blob = file_get_contents($tmpPath);
$name = sha1($blob) . '.img'; // e.g. b99c6e26c3775fca9918ad614b7be7fe4fd7bee3.img

// Save the file to your server somewhere.
$dstPath = "/path/to/imgdb/$name";
move_uploaded_file($tmpPath,$dstPath);

// TODO: insert reference (i.e. $name) into database somehow...

是的,研究有broken SHA-1,但是如果你足够偏执,你可以很容易地写出一些保护措施(例如检查具有相同哈希的现有上传;它的内容不同,只是变异/附加名称稍微改变它)。您无法通过其内容在后端识别图像:您只需要一个唯一的名称。完成后,只需从数据库中查找,找出与实际图像数据相对应的磁盘上的文件路径。

如果您希望图像文件非常大,则可以使用第4个参数{/ 3}}来限制读入内存的数量。