我现在正在以这种格式使用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").'*')
但是我想要一种方法将它们组合成一个单独的语句。感谢任何帮助,谢谢!
答案 0 :(得分: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);
答案 1 :(得分: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/ 玩得开心
答案 2 :(得分:0)
在我看来,平台(或shell)依赖。
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?
答案 3 :(得分:0)
怎么样
glob('/STORAGE/LOGFILES/'.date("Y").'-{'.date("m").','.date("m")-1.'}*',GLOB_BRACE)