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