1

現在、この形式で glob を使用しています。

glob('/STORAGE/LOGFILES/*.*')

/STORAGE/LOGFILES 内には、すべて YYYY-MM-DD で始まる何百ものテキスト ファイルがあります。*.*代わりに、現在の月と前の月のみを表示するようにパターンを変更したいと思います。

glob('/STORAGE/LOGFILES/2013-04*')
glob('/STORAGE/LOGFILES/2013-03*')

私が理解できないように見えるのは、単一のステートメントでこれを行う方法です。私は今月のやり方を理解したと思います:

glob('/STORAGE/LOGFILES/'.date("Y-m").'*')

しかし、すべてを 1 つのステートメントに結合する方法が必要です。助けてくれてありがとう!

4

4 に答える 4

2

GLOB_BRACE次のようなオプションを使用できます。

$now = new DateTime();
$lastMonth = new DateTime('-1 month');
$monthList = $now->format('Y-m').','.$lastMonth->format('Y-m');
$pattern = '/STORAGE/LOGFILES/{'.$monthList.'}*';
glob($pattern, GLOB_BRACE);
于 2013-04-11T12:45:54.433 に答える
0

このコードを試してください

glob('/STORAGE/LOGFILES/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*')

globパターンで遊ぶことができます: http://cowburn.info/2010/04/30/glob-patterns/

于 2013-04-11T12:41:29.817 に答える
0

プラットフォーム(またはシェル)に依存しているように思えます。

glob() 関数は、libc glob() 関数で使用される規則に従ってパターンに一致するすべてのパス名を検索します。これは、一般的なシェルで使用される規則に似ています。

このメモを参照してください: http://www.php.net/manual/en/function.glob.php#110340

<?php

$a = glob('/path/*{foo,bar}.dat',GLOB_BRACE);
print_r($a);

?>

Result : 
Array
(
    [0] => /path/file_foo.dat
    [1] => /path/file_foobar.dat
    [2] => /path/file_foobar.dat
)

たぶん、「|」を試すことができます または署名しますか?

正規表現をサポートしていませんか: http://www.php.net/manual/en/function.glob.php#88250 ?

于 2013-04-11T12:41:55.850 に答える
0

どうですか

glob('/STORAGE/LOGFILES/'.date("Y").'-{'.date("m").','.date("m")-1.'}*',GLOB_BRACE)
于 2013-04-11T12:42:55.703 に答える