删除文件名中包含特殊字符的文件

时间:2010-12-29 19:13:02

标签: php solaris filenames character unlink

我需要通过PHP删除文件名中包含空格,,()!等特殊字符的旧文件。经典unlink($filename)不适用于这些文件。如何将文件名转换为接受unlink函数和文件系统的文件名?它在Solaris计算机上运行,​​我没有其他访问权限。

4 个答案:

答案 0 :(得分:2)

你是如何构建$filename的? unlink应该可以处理任何带有特殊字符的文件名,如果你正常转义它。 e.g。

表示名称为this has, various/wonky !characters in it的文件,然后

 $filename = 'this has\, various\/wonky \!characters in it';
 unlink($filename);

应该有用。

答案 1 :(得分:1)

unlink接受任何有效的字符串,并尝试删除该字符串中的文件。

unlink('/home/user1/"hello(!,');

也许你没有正确地逃避某些角色。

答案 2 :(得分:1)

您还可以使用RegexIterator找到所有需要的文件并取消链接:

<?php

$dir  = new RecursiveDirectoryIterator('.');
$iterator = new RecursiveIteratorIterator($dir);
$regex = new RegexIterator($iterator, '/(^.*[\s\.\,\(\)\!]+.*)/', RecursiveRegexIterator::GET_MATCH);

foreach ($regex as $file) {
        if (is_file($file[0])) {
                print "Unlink file {$file[0]}\n";
                unlink($file[0]);
        }
}

此代码段以递归方式遍历当前('。')的所有目录,并通过正则表达式匹配所有文件'/(^。 [\ s \,。()!] +。)/' ,然后删除它们。

答案 3 :(得分:0)

我在Linux中使用的方法是使用绝对路径,例如“rm ./filename”,即点斜杠。

您也可以使用逃避字符。就像“rm \ -filename”那样 - 反向连字符。