为什么PHP函数glob()返回与通配符不匹配的文件?

时间:2010-12-30 11:30:44

标签: php glob

data2目录中,我有以下文件:

alt text

使用以下代码(在Mac上运行),我想只获取以.xls结尾的文件:

$file_names = glob('data2/*.xls');
foreach ($file_names as $file_name) {
    echo $file_name . '<br/>';
}

我希望此代码会返回一个文件27template.xls,但是,它还会返回包含TEMP的文件并向其添加.xls

alt text

已添加:如果我将smaller.xls更改为smaller.xlsx,则它无法按预期找到,但如果我将其更改为smaller.NNN,则会找到{ {1}}。

如何使用smaller.NNN.xls仅获取glob()个文件?

2 个答案:

答案 0 :(得分:2)

我认为这是因为您正在查看的扩展程序可能不是真正的扩展程序(默认情况下隐藏在Finder上)。您可以通过单击文件检查实际扩展,然后单击“获取信息”。如果要显示所有文件的扩展名,则必须按照Apple文档中的步骤进行操作:

  

要显示所有文件的扩展名,请选择Finder&gt;首选项并单击“高级”,然后选择“显示所有文件扩展名”。

答案 1 :(得分:0)

像data2 / smaller.xlsTEMP.xls这样的文件名确实匹配了data2 / * .xls的glob表达式,所以它将由glob返回...你确定它不存在吗? (可能是Mac隐藏的Windows等价物)

尝试将两个glob表达式与array_diff()

组合
$file_names = array_diff(glob('data2/*.xls'),glob('data2/*.*.xls'));

第二个glob返回你不想要的那些条目,然后是第一个glob

结果中的array_diff()过滤器

修改

或尝试在您的glob之前调用clearstatcache(),以防PHP缓存先前查询中的目录条目