0

我是 php 新手,想请你帮忙,从 file_get_contents() 返回一个独特的结果。原因是我想给每张照片一个唯一的名字,这样以后就可以只删除其中的一张,而不是全部。

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

不幸的是 time() 和 microtime() 在这种情况下没有帮助。

4

2 回答 2

0

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

独特的();

$imageName = $imageName 。'_' 。独特的();

于 2017-07-08T19:06:20.883 回答
0

为什么不直接生成内容的 SHA-1 并将其用作文件名(有点像如何git将对象存储在存储库的松散对象数据库中)?我通常不喜欢将 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...

是的,研究已经破坏了 SHA-1,但是如果你足够偏执,你可以很容易地写一些保护措施来防止它(例如检查具有相同散列的现有上传;它的内容不同,只需变异/附加到名称 a几乎没有改变它)。您不是通过内容来识别后端的图像:您只需要一个唯一的名称。一旦你有了它,你只需从数据库中查找它以找出与实际图像数据相对应的磁盘上的文件路径。

如果您希望图像文件非常大,您可以使用第 4 个参数将读入内存的数量限制为file_get_contents().

于 2017-07-08T21:21:34.767 回答