php - 一种适合处理大量文件上传的技术

标签 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 解决方案,但我也对使用其他脚本语言的现有解决方案感兴趣,只要它们保证上传之间不会发生冲突。

最佳答案

问题也可能出在您的 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/

相关文章:

javascript - 有人对 Andrew Valums Ajax Upload (qq.FileUploader Basic) 脚本有经验吗?

javascript - 可拖动的人物与随机静态人物的碰撞

c# - XNA 从 spritesheet 获取颜色数据导致游戏崩溃

actionscript-3 - ActionScript 冲突 : solving exceptions and strange cases

PHP MySQL设置/配置表调用值

PHP 表单(有时)将空白条目输入 MySQL

java - 如何使用 Google Finance API 获取股票报价?

php - 将旧用户迁移到 symfony2

android - android 网络浏览器是否允许上传刚从相机拍摄的照片?

javascript - 将文件上传到 PouchDB/CouchDB