适用于处理大量文件上传的技术

时间:2011-03-14 11:22:42

标签: php file-upload collision

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

PHP temp file names for uploads colliding

PHP file uploads being "hijacked" by partial uploads

正如我所读到的,问题似乎与文件tmp名称中的冲突有关。为了避免这种情况,我们考虑更改upload_tmp_dir PHP变量,该变量取决于从记录的用户名计算的整数,以减少冲突概率。但是,此变量在运行时不可更改,因为当PHP开始执行时,该文件已经发布到服务器。

我不确定如何解决这个问题,如果每日上传率不断提高,我想修复它以防止将来出现问题。

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

1 个答案:

答案 0 :(得分:1)

问题还在于您的DBlogic。一种安全的方法是向DB插入一行,获取记录的主键。使用该数字作为文件名将防止冲突。你可以这样做:

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

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