3

,ファイル名にスペース、、、、など(の特殊文字が含まれる古いファイルを PHP 経由で)削除する必要があります。!これらのファイルではクラシックunlink($filename)は機能しません。リンク解除機能とファイルシステムを受け入れるファイル名にファイル名を変換するにはどうすればよいですか? これは Solaris マシンで実行されていますが、別の方法でアクセスすることはできません。

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

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 に答える
1

unlink は有効な文字列を受け入れ、その文字列内のファイルを削除しようとします。

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

特定の文字を適切にエスケープしていない可能性があります。

于 2010-12-29T19:18:38.770 に答える
0

Linux で行う方法は、「rm ./filename」のような絶対パスを使用することです。これはドット スラッシュです。

エスケープ文字も使用できます。"rm \-filename" のように - backspash ハイフン。

于 2010-12-29T19:18:03.590 に答える