PHP unlink文件没有扩展名

时间:2017-07-11 09:04:13

标签: php unlink pathinfo

我正在尝试取消链接目录中没有扩展名的文件。

我做了以下,但没有奏效:

      $fileInfo = pathinfo($this->outputPath);
      if($fileInfo['extension'] == NULL)
      {
          unlink($fileInfo['dirname'].$fileInfo['basename']);
      }

2 个答案:

答案 0 :(得分:2)

正如@CBroe在评论中注意到的那样:

  

你与NULL的比较在这里是错误的。

检查empty'而不是:

  $fileInfo = pathinfo($this->outputPath);

  if(empty($fileInfo['extension']))
  {
      unlink($fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename']);
  }

此外,您错过了DIRECTORY_SEPARATORdirname之间的basename

更新:正如@hassan指出的那样,empty也不是检查这一点的正确方法。这是因为类似unix的系统上的目录...将通过此测试,这是不可取的。

因此,检查没有extension的文件的正确方法是:

  if(isset($fileInfo['extension']) === false)
  {
      unlink($fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename']);
  }

答案 1 :(得分:2)

根据pathinfo manual

  

注意:
  如果路径没有扩展名,则没有扩展名元素   将被退回(见下面的第二个例子)。

因此您需要使用isset检查返回的值是否具有扩展元素,请注意使用empty将传递unix系统中的点目录,例如,如果您正在迭代某些目录为空将将...目录视为空扩展元素

// check if not isset
if(isset($fileInfo['extension']) === false) {
    // perform some action
}

或者如果将来你想要执行一些复杂的搜索[例如:递归搜索没有扩展名的文件],你可以使用FilesystemIterator

foreach (new FilesystemIterator($dir) as $fileInfo) {
    // check if some file extension is null
    if ($fileInfo->getExtension() == null) {
        // perform some action
    }
}