2012-03-13 10 views
1

私は2つのフォルダを持ち、1つはビデオを持ち、もう1つは各ビデオの設定ファイル(1つのビデオにつき3ファイル)です。今私はビデオを削除したい場合、私は手でファイルを削除する必要があります。大文字と小文字を区別しない(グロブのような)パターンでファイルをリンク解除する

<?php 

$filename = 'name.of.the.video.xml';  
$term = str_replace(".xml","", $filename); 
$dirPath = ("D:/test/"); 

foreach (glob($dirPath.$term.".*") as $removeFile) 
{ 
    unlink ($removeFile); 
} 

?> 

エコーが返されます:

D:/test/name.of.the.video.jpg

D:/test/name.of.the 私はこれを見つけました。 video.srt

D:/test/name.of.the.video.xml

OKですし、それは私をたくさん助け、しかし、私はここに問題を抱えています。私は、その文字列を探してフォルダをエコーと同じとされていない場合 Name.of.The.video.jpg Name.Of.The.Video.xml

ないすべてのファイルは同じ元です$ filenameは空を返します。 私の質問は、どのようにしてその検索を大文字と小文字を区別することができますか? ありがとうございます。

答えて

2

大文字と小文字を区別するglob関数を使用しています。したがって、間違った関数を使用してファイルのリストを取得しています。

したがって、ディレクトリ内のファイル名は、すべて大文字と小文字が同じになるように正規化する必要があります。あるいは、大文字小文字を区別しないでディレクトリリストを取得するために別の方法を使用する必要があります。私は最初に提案しますが、それがオプションではない場合は、最初にすべてのファイルに対してglobを入力してから、preg_grepを使用してファイルのリストをフィルタリングして、大文字小文字を区別しないパターンを指定できますか?

それはRegexIteratorDirectoryIteratorを使用する方が実用的だとの点に私をリード:

$filename = 'name.of.the.video.xml'; 
$term = basename($filename, ".xml"); 
$files = new DirectoryIterator($dirPath); 
$filesFiltered = new RegexIterator($files, sprintf('(^%s\\..*$)i', preg_quote($term))); 
foreach($filesFiltered as $file) 
{ 
    printf("delete: %s\n", $file); 
    unlink($file->getPathname()); 
} 

Iteratorのコードの柔軟性の良い例があなたの変更要件は次のとおりです。2つのディレクトリのことを実行します。一度。 2つのDirectoryIteratorを作成し、AppendIteratorを付けてもう一方に追加します。ジョブが完了しました。残りのコードは同じままです。

... 
$files = new AppendIterator(); 
$files->append(new DirectoryIterator($dirPath1)); 
$files->append(new DirectoryIterator($dirPath2)); 
... 

Voilá。いいですね? globはちょうどそれを必要とするいくつかの速い仕事のために大丈夫です。ディレクトリ操作を持つ他のすべてについては、SPLを検討し始めます。それはより多くのパワーを持っています。

+0

$ removeFile = scandir($ dirPath); print_r(preg_grep( "/ $ term/i"、$ removeFile)); 私はこれで試してみる – akun

+0

@akun:私はあなたに例を追加しました。私が意図したことを誤解したわけではありません。それはファイルを削除することです。だから注意してください。 – hakre

+0

@akun: 'DirectoryIterator'をうまく使ってください。 – hakre

1

strcasecmp()はこれに対して有効な機能ですか?大文字と小文字を区別しないstr比較関数ですか?

あなたがファイル名を知っていて、それをエコーアウトすることができれば、これをunlink()に渡すことができますか?

関連する問題