PHP目录存在检查问题

时间:2016-05-13 14:47:32

标签: php file mkdir

我在上传文件时使用PHP创建新目录时遇到问题。

目录已创建,但如果同一脚本的另一个实例同时运行,则目录存在则检查无法正常工作(提供PHP警告)。

有人告诉我这是一种竞争条件,但在添加一些随机睡眠时间之后我仍然有这个问题。

usleep(mt_rand(1, 50));

if(!is_dir($dir)){
  mkdir($dir);    
}

usleep(mt_rand(1, 50));

任何人都可以帮忙吗?

有人知道一个安全的方式来上传多个部分的文件,同时上传3-4个部分吗?目前我正在将上传的部分移动到临时目录中(如果更多部件同时到达,则临时目录上的is_dir失败),然后当来自该目录的文件数等于部件组合的部件数量时。但它失败了很多次,有时is_dir发出警告,有时候部分会合并两次......

2 个答案:

答案 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 - 可以轻松处理块块中的大文件。