我在一个每天从用户那里收到大约 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 解决方案,但我也对使用其他脚本语言的现有解决方案感兴趣,只要它们保证上传之间不会发生冲突。
最佳答案
问题也可能出在您的 DBlogic 上。一种安全的方法是向数据库插入一行,获取记录的主键。使用该数字作为文件名将防止冲突。你可以这样做:
LOCK TABLES image WRITE;
INSERT INTO image (id) VALUES (NULL);
SELECT LAST_INSERT_ID();
UNLOCK TABLES;
然后有你的(auto_increment)id。您可以保存其余数据(例如,将标签保存到不同的表中)并处理您的文件,这样名称就不会冲突。
关于php - 一种适合处理大量文件上传的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297886/