2016-09-21 169 views
0

当我要检查文件是否存在,如果存在,添加后缀我用下面的代码是工作的罚款PHP检查文件是否在同一时间对多个文件夹存在

$increment = ''; //start with no suffix 
    while(file_exists($_SERVER["DOCUMENT_ROOT"]."/".$file_name . $increment . '.' . $extension)) 
    { 
     $increment++; 
    } 
    $final_name = $file_name . $increment. '.' . $extension; 

现在我要检查文件是否存在于多个文件夹中,文件夹的名称是否在数组中(我可以从该数组中添加或删除文件夹);

$folders[] = "thumb"; 
$folders[] = "medium"; 
$folders[] = "large"; 
$folders[] = "xlarge"; 

现在我必须检查文件是否存在于所有这些文件夹中。

如果文件在此文件夹中有我,直到该文件并非在所有这些文件夹

赞赏任何帮助的存在再次添加后缀 检查的一个存在。

+0

只需检查文件是否存在迭代在该数组中收集的文件夹。那是什么问题? – arkascha

+0

另外还有一个提示:试图找到一个“尚未使用”的文件名来保存文件通常是文件名生成不好的方法。为什么要求?为什么不能简单地创建保证唯一的文件名?检查仍然有意义,但是增量策略非常不雅观。 – arkascha

+0

@arkascha我不能创建用户上传文件时保证唯一的文件名。所以当文件上传时,如果文件名存在,我必须调整图像大小,我必须添加一个后缀。在一个文件夹非常简单,但在同时检查多个文件夹的情况下更复杂,为什么我发布了这个问题 – ntan

回答

1

我同意@arkascha的观点,如果该文件是内部使用的,使用带有唯一散列的文件名会更好。

但是,如果有必要,请尝试使用foreach()一次检查数组中的前缀。

function files_suffix_exists($file_name, $folders){ 
    $root = $_SERVER["DOCUMENT_ROOT"]; 
    if(file_exists($root."/".$file_name . '.' . $extension){ 
     return true; 
    } 
    foreach($folders as $folder){ 
     if(file_exists($root."/".$folder."/".$file_name . '.' . $extension){ 
      return true; 
     } 
    } 
    return false; 
} 

$folders[] = "thumb"; 
$folders[] = "medium"; 
$folders[] = "large"; 
$folders[] = "xlarge"; 


$increment = ''; //start with no suffix 
while(files_suffix_exists($file_name, $folders)) 
    $increment++; 
    $file_name .= $increment; 
} 

$final_name = $file_name . '.' . $extension; 
+0

我同意,内部使用是更好的独特的哈希,但我不面临内部user.Your解决方案是真棒,我会尝试在接下来的一小时。谢谢 – ntan

+0

如果我想保持原来的名称,我可能会使用一个表无论如何要保持内部名称和用户自定义名称之间的关系。 – HZS

+0

这将增加sql查询。我认为这将是一个不必要的查询,我计算每一个我保持查询低 – ntan

相关问题