检查目录中是否存在文件

时间:2014-07-28 19:41:39

标签: php

我有一个php脚本来检查Linux系统中是否存在任何文件。

如果我从目录中删除该文件,当我调用file_exists函数时脚本仍然为true,但该目录为空。

似乎scandir function在结果目录中扫描点给我文件退出语句。

另外,我试过glob function我得到的结果相同。

这是我的代码: -

<?php
while(true)
{

  foreach (scandir("/var/log/phplogs/iplogs/") as $filename)
  {

    if(file_exists("/var/log/phplogs/iplogs/$filename"))
    {
      echo "file exist\n";
    }
    else
    {
      echo "file doesn't exist\n";
    }
  }
}

?>

3 个答案:

答案 0 :(得分:0)

我不认为scandir的内置功能可以帮助解决这个问题。但是你可以简单地做这样的事情:

$filtered_contents = array_diff(scandir("/var/log/phplogs/iplogs/"), array('..', '.'));

然后在$filtered_contents循环中使用foreach而不是scandir来电。

答案 1 :(得分:0)

使用is_file()检查它是否是文件而不是目录。另外,clearstatcache()

while(true)
{
  clearstatcache();

  foreach(scandir("/var/log/phplogs/iplogs/") as $filename)
  {
    if(is_file("/var/log/phplogs/iplogs/$filename"))
    {
      echo "file exist\n";
    }
    elseif(!is_dir("/var/log/phplogs/iplogs/$filename"))
    {
      echo "file doesn't exist\n";
    }
  }
}

答案 2 :(得分:0)

您可以使用此代码跳过.结果中的..scandir结果:

<?php

$files = array_filter(scandir('/var/log/phplogs/iplogs/'), function($item) {
    return $item !== '.' && $item !== '..';
});

foreach ($files as $filename)
{
    if(file_exists("/var/log/phplogs/iplogs/$filename"))
    {
        echo "file exist\n";
    }
    else
    {
        echo "file doesn't exist\n";
    }
}

通过修改array_filter回调,您也可以省略其他文件甚至子目录。