-2

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

我做了以下,但没有工作:

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

2 回答 2

2

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

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

改为检查'ness:

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

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

此外,您错过了和DIRECTORY_SEPARATOR之间dirnamebasename


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

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

  if(isset($fileInfo['extension']) === false)
  {
      unlink($fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename']);
  }
于 2017-07-11T09:17:08.203 回答
2

根据路径信息手册

注意:
如果路径没有扩展名,则不会返回扩展名元素(参见下面的第二个示例)。

所以你需要检查返回的值是否有使用isset的扩展元素,注意使用 empty 将传递 unix 系统中的点目录,例如,如果你正在迭代某个目录,empty 会将.and..目录视为一个空的扩展元素

// 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
    }
}
于 2017-07-11T09:33:12.263 回答