Просто используйте класс DirectoryIterator.
foreach (new DirectoryIterator('../pictures/uploads') as $fileInfo) {
if ($fileInfo->isDot()) continue;
if (stripos($fileInfo->getFilename(), 'profile' . $id) !== false) {
var_dump($fileInfo->getExtension());
}
}
Класс DirectoryIterator доступен с PHP 5.3.6.
Более подробным примером может быть Экземпляр DirectoryIterator, используемый экземпляром FilterIterator, чтобы просто вывести нужные файлы. В данном примере требуется минимум PHP 7.4. Если вы используете версию PHP меньше 7.4, удалите подсказки типов для свойств класса.
class MyFileFilter extends FilterIterator
{
protected string $filename;
public function __construct(Iterator $iterator, $filename)
{
$this->filename = $filename;
parent::__construct($iterator);
}
public function accept(): bool
{
$info = $this->getInnerIterator();
return stripos($info->getFilename(), $this->filename) !== false;
}
}
Класс FilterIterator доступен начиная с PHP 5.1. Показанное выше расширение использует Iterator, ищет указанное имя файла и возвращает объект SplFileInfo, если имя файла совпадает.
Как его использовать:
$directory = new DirectoryIterator('../pictures/uploads');
$filename = 'picture' . $id;
$filter = new MyFileFilter($directory, $filename);
foreach ($filter as $file) {
var_dump($file->getExtension());
}
Foreach l oop в основном фильтр, который возвращает только файлы, которые соответствуют заданному имени файла. Каждый возвращаемый файл является экземпляром SplFileInfo. При этом вы можете использовать метод SplFileInfo :: getExtension (), чтобы получить расширение файла.
Последним, но не менее важным является класс GlobIterator , который доступен с PHP 5.3. Это самый простой способ итерации по заданному пути с заполнителями.
$filesystem = new GlobIterator('../pictures/uploads/profile' . $id . '.*');
foreach ($filesystem as $file) {
var_dump($file->getExtension());
}