我需要通过 PHP 删除文件名中带有特殊字符的旧文件,如空格,
、、、、等等。Classic不适用于这些文件。如何将文件名转换为接受取消链接功能和文件系统的文件名?它在 Solaris 机器上运行,我没有其他访问权限。(
)
!
unlink($filename)
问问题
4089 次
4 回答
2
你是如何构建的$filename
?如果您对其进行正常转义, unlink 应该适用于任何带有特殊字符的文件名。例如
对于名称为 的文件this has, various/wonky !characters in it
,则
$filename = 'this has\, various\/wonky \!characters in it';
unlink($filename);
应该管用。
于 2010-12-29T19:20:10.827 回答
1
unlink 接受任何有效的字符串并将尝试删除该字符串中的文件。
unlink('/home/user1/"hello(!,');
也许您没有正确转义某些字符。
于 2010-12-29T19:18:38.770 回答
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\,.()!] +。)/'匹配所有文件,然后删除它们。
于 2010-12-29T23:30:32.730 回答
0
我在 Linux 中执行此操作的方式是使用绝对路径,例如点斜杠的“rm ./filename”。
您还可以使用转义字符。就像“rm \-filename”一样 - 反斜杠连字符。
于 2010-12-29T19:18:03.590 回答