我在上传文件时使用PHP创建新目录时遇到问题。
目录已创建,但如果同一脚本的另一个实例同时运行,则目录存在则检查无法正常工作(提供PHP警告)。
有人告诉我这是一种竞争条件,但在添加一些随机睡眠时间之后我仍然有这个问题。
usleep(mt_rand(1, 50));
if(!is_dir($dir)){
mkdir($dir);
}
usleep(mt_rand(1, 50));
任何人都可以帮忙吗?
有人知道一个安全的方式来上传多个部分的文件,同时上传3-4个部分吗?目前我正在将上传的部分移动到临时目录中(如果更多部件同时到达,则临时目录上的is_dir失败),然后当来自该目录的文件数等于部件组合的部件数量时。但它失败了很多次,有时is_dir发出警告,有时候部分会合并两次......
答案 0 :(得分:0)
mkdir()
成功时返回true,失败时返回false(dir已存在)。因此,您可以将其用作条件检查的一部分。
if (!is_dir($dir) && mkdir($dir)) {
// good to go
}
答案 1 :(得分:0)
您希望在页面顶部使用clearstatcache()
测试目录,以便当前目录结构的系统缓存是新鲜的。 read more here
上传javascript将文件分成多个部分并向php发送4个ajax请求,因此php同时收到4个部分。当收到所有部分时,php应该将它们组合起来重现服务器上的文件
为什么要将它们拆分,将Ajax作为单个请求发送,然后允许PHP在自己的脚本中处理每个blob文件部分。这将回避问题。 PHP - with the correct setting up - 可以轻松处理块块中的大文件。