我正在尝试取消链接目录中没有扩展名的文件。
我做了以下,但没有工作:
$fileInfo = pathinfo($this->outputPath);
if($fileInfo['extension'] == NULL)
{
unlink($fileInfo['dirname'].$fileInfo['basename']);
}
正如@CBroe 在评论中注意到的那样:
您与 NULL 的比较在这里是错误的。
改为检查空'ness:
$fileInfo = pathinfo($this->outputPath);
if(empty($fileInfo['extension']))
{
unlink($fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename']);
}
此外,您错过了和DIRECTORY_SEPARATOR
之间dirname
的basename
。
更新:正如@hassan 指出的那样,empty
这也不是检查这个的正确方法。这是因为目录.
和..
类 unix 系统将通过此测试,这是不希望的。
因此,检查文件的正确方法extension
是:
if(isset($fileInfo['extension']) === false)
{
unlink($fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename']);
}
根据路径信息手册:
注意:
如果路径没有扩展名,则不会返回扩展名元素(参见下面的第二个示例)。
所以你需要检查返回的值是否有使用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
}
}