PHP-查找目录中与特定字符串匹配的所有文件并放入数组中


PHP - find all all files within directory that match certain string and put in array

我在服务器上有一个客户上传的图像目录。我需要能够获得与某个字符串或项代码匹配的所有文件,并将它们放入数组中。文件名和扩展名总是可以变化的,但每个文件的文件名中总是有一个8位的项目代码。例如,在我的目录中,我有:

/images/
62115465.jpg
62115465-02.jpg
62115465-07.jpg
13452766.png
56773392.jpeg
56773392-avatar.jpg

我想能够拉出所有匹配8位项目代码的文件,所以:

//all images that have 62115465 in the file name would give me
62115465.jpg
62115465-02.jpg
62115465-07.jpg
//or all images that have 56773392 in the file name would give me
56773392.jpeg
56773392-avatar.jpg

然后希望它们像这样排列:

$all_files = array(
  '62115465.jpg',
  '62115465-02.jpg',
  '62115465-07.jpg'
);

我尝试使用下面的glob()函数,它可以匹配像62115465.jpg这样的一些文件,但不会拾取其他两个带有-02-07标签的文件

$files = glob('62115465.'.*');
glob('62115465*');

注意CCD_ 5的移除。glob()本质上复制了在命令提示符下执行类似dir *.txt的操作。

我知道这个问题已经得到了回答,但对于新手/中级程序员,或者任何新使用glob()函数的人(AHEMMECOUGH)来说,这里发生了什么还不清楚。因此,这里有一个完整的脚本,我拼凑在一起做了与OP要求的几乎相同的事情——在目录中搜索以目标前缀开头的所有文件,并将它们添加到数组中。:

<?php
$imgs = array();
$dir =  $_SERVER['DOCUMENT_ROOT'].'/path/to/your/images';
$prefix = 'your-prefix_string-_-';
chdir($dir);
$matches = glob("$prefix*");
if(is_array($matches) && !empty($matches)){
    foreach($matches as $match){
        $imgs[] = $match;
    }
}
?>

你能试试这个吗,

 $files = glob('62115465.*');

这样尝试-

$files = glob("[^62115465]*.*);

或者像这样:

$files = glob("62115465*.*);