3

我需要通过 PHP 删除文件名中带有特殊字符的旧文件,如空格,、、、、等等。Classic不适用于这些文件。如何将文件名转换为接受取消链接功能和文件系统的文件名?它在 Solaris 机器上运行,我没有其他访问权限。()!unlink($filename)

4

4 回答 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 回答