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").'*')

但我想要一种将它们组合成一个语句的方法。感谢任何帮助,谢谢!

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() 函数使用的规则搜索所有匹配模式的路径名,这类似于普通 shell 使用的规则。

请参阅此说明: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 回答