4

我在一个每天从用户那里收到大约 500 张照片上传的网站工作。虽然这不是一个很高的数字,但我们在不同的上传之间遇到了一些冲突。一些用户报告说看到的是另一张图片的缩略图,而不是他们上传的那张。我一直在寻找这个问题的解释,我在stackoverflow中发现了几个问题:

上传冲突的 PHP 临时文件名

PHP文件上传被部分上传“劫持”

正如我所读到的,问题似乎与文件 tmp 名称中的冲突有关。为了避免这种情况,我们考虑upload_tmp_dir根据从记录的用户名计算的整数来更改 PHP 变量,以降低冲突概率。然而,这个变量在运行时是不可改变的,因为当 PHP 开始执行时,文件已经被发送到服务器。

我不确定如何解决这个问题,我想修复它以防止在每日上传速度不断增加时出现问题。

有很多网站处理大量上传,所以我想知道如何避免这种冲突问题。我正在工作的网站在 PHP 5.2.14 上运行。为了简单起见,我更喜欢 PHP 解决方案,但我也对使用其他脚本语言的现有解决方案感兴趣,只要它们保证上传之间不会发生冲突。

4

1 回答 1

2

问题也可能出在您的 DBlogic 中。一种安全的方法是向数据库中插入一行,获取记录的主键。使用该数字作为文件名将防止冲突。您可以执行以下操作:

LOCK TABLES image WRITE;
INSERT INTO image (id) VALUES (NULL);
SELECT LAST_INSERT_ID();
UNLOCK TABLES;

然后有你的 (auto_increment) id。您可以保存其余数据(例如标签到不同的表)并处理您的文件,并且名称不会发生冲突。

于 2011-03-14T11:40:38.060 回答