如果第一条语句存在,执行第二条语句

问题描述:

如果一个目录不存在,我创建目录并保存一个文件,如果该目录存在,我也可以保存文件。一次创建一个文件的时间不应与下面的代码同时生成。如果现在创建第一个文件,那么只有在调用该函数时才会创建下一个文件。这些文件被命名为R1,R2 .... Rn。我怎样才能做到这一点,这造成他们都在同一时间如果第一条语句存在,执行第二条语句

$fileName1=$fileName1='somedir/'.$thedir.'/'.$thefile.'_R1.xlsx'; 

... 

if (!dir($dirName)) 
{ 
    mkdir('somedir/' . thedir, 0777); 
    $objWriter->save($fileName); 
} 

if (dir($dirName) && (!file_exists($fileName))) 
{ 
    $objWriter->save($fileName); 
} 

if (dir($dirName) && file_exists($fileName)) 
{ 
    $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R1.xlsx'); 
} 

if (dir($dirName) && file_exists($fileName1)) 
{ 
    $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R2.xlsx'); 
} 

... 
+0

你需要[is_dir()](http://php.net/is_dir)函数[DIR()](HTTP: //php.net/dir)不会像你想象的那样行事 – Touki

if (!is_dir($dir)) 
    mkdir($dir, 0777); 

$suffixes = array('_R1.xlsx', '_R2.xlsx'); 
foreach($suffixes as $suffix) { 
    $fileName = $dir.'/' . $thefile . $suffix; 
    if (! file_exists($fileName)) { 
    $objWriter->save($fileName); 
    break; 
    } 
} 

您必须添加错误处理,并请注意,仅仅检查文件可创建的并发问题(两个进程尝试都看到这该文件不存在并尝试创建它)。

+0

非常感谢,这很有魅力。我如何使第一个文件没有后缀,然后是后来的R1 .... Rn – Alphy

+0

我终于明白了,我不必在数组的第一个值中使用后缀 – Alphy

+0

空后缀''' ' –

您将需要使用[is_dir][1]函数来检查文件夹是否存在。

看看这个代码 - 从一个有点返工你

$fileName1=$fileName1='somedir/'.$thedir.'/'.$thefile.'_R1.xlsx'; 
.... 

// Directory does not exist - create it 
if (!is_dir($dirName)) 
{ 
    mkdir('somedir/' . thedir, 0777); 
    $objWriter->save($fileName); 
} 

// Directory exists 
if (is_dir($dirName)) 
{ 
    // File does not exist - create it 
    if (!file_exists($fileName))) 
    { 
     $objWriter->save($fileName); 
    } 

    // Check one more time if the file exists 
    if (file_exists($fileName))) 
    { 
     $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R1.xlsx'); 
     $objWriter->save('somedir/' . $thedir . '/' . $thefile . '_R2.xlsx'); 
    } 
} 

.......