在data2
目录中,我有以下文件:
使用以下代码(在Mac上运行),我想只获取以.xls
结尾的文件:
$file_names = glob('data2/*.xls');
foreach ($file_names as $file_name) {
echo $file_name . '<br/>';
}
我希望此代码会返回一个文件27template.xls
,但是,它还会返回包含TEMP
的文件并向其添加.xls
:
已添加:如果我将smaller.xls
更改为smaller.xlsx
,则它无法按预期找到,但如果我将其更改为smaller.NNN
,则会找到{ {1}}。
如何使用smaller.NNN.xls
仅获取glob()
个文件?
答案 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缓存先前查询中的目录条目