Поиск файлов Php по расширению

Обновлено: 01.07.2024

Laravel предоставляет мощную абстракцию файловой системы благодаря замечательному PHP-пакету Flysystem от Франка де Йонге. Интеграция Laravel Flysystem предоставляет простые драйверы для работы с локальными файловыми системами, SFTP и Amazon S3. Более того, переключаться между этими вариантами хранения данных между локальным компьютером разработки и производственным сервером очень просто, поскольку API остается одинаковым для каждой системы.

Конфигурация

Файл конфигурации файловой системы Laravel находится по адресу config/filesystems.php. В этом файле вы можете настроить все «диски» вашей файловой системы. Каждый диск представляет определенный драйвер хранилища и место хранения. Примеры конфигураций для каждого поддерживаемого драйвера включены в файл конфигурации, поэтому вы можете изменить конфигурацию в соответствии с вашими предпочтениями в отношении хранилища и учетными данными.

Локальный драйвер взаимодействует с файлами, хранящимися локально на сервере, на котором запущено приложение Laravel, в то время как драйвер s3 используется для записи в облачное хранилище Amazon S3.

Вы можете настроить любое количество дисков и даже иметь несколько дисков с одним и тем же драйвером.

Локальный драйвер

При использовании локального драйвера все операции с файлами выполняются относительно корневого каталога, определенного в файле конфигурации вашей файловой системы. По умолчанию это значение равно каталогу хранилища/приложения. Следовательно, следующий метод запишет в storage/app/example.txt :

Общий диск

Общий диск, включенный в файл конфигурации файловой системы вашего приложения, предназначен для файлов, которые будут общедоступными. По умолчанию общедоступный диск использует локальный драйвер и хранит свои файлы в storage/app/public .

Чтобы сделать эти файлы доступными из Интернета, необходимо создать символическую ссылку из public/storage в storage/app/public . Благодаря этому соглашению о папках ваши общедоступные файлы будут храниться в одном каталоге, который можно легко использовать в разных развертываниях при использовании систем развертывания с нулевым временем простоя, таких как Envoyer.

Чтобы создать символическую ссылку, вы можете использовать Artisan-команду storage:link:

После сохранения файла и создания символической ссылки вы можете создать URL-адрес файлов с помощью помощника ресурсов:

Вы можете настроить дополнительные символические ссылки в файле конфигурации вашей файловой системы. Каждая из настроенных ссылок будет создана при выполнении команды storage:link:

Предварительные требования к драйверу

Конфигурация драйвера S3

Прежде чем использовать драйвер S3, вам необходимо установить пакет Flysystem S3 с помощью диспетчера пакетов Composer:

Информация о конфигурации драйвера S3 находится в файле конфигурации config/filesystems.php. Этот файл содержит пример массива конфигурации для драйвера S3. Вы можете изменить этот массив с помощью собственной конфигурации S3 и учетных данных. Для удобства эти переменные среды соответствуют соглашению об именах, используемому интерфейсом командной строки AWS.

Конфигурация FTP-драйвера

Прежде чем использовать драйвер FTP, вам необходимо установить FTP-пакет Flysystem с помощью менеджера пакетов Composer:

Интеграция Laravel Flysystem отлично работает с FTP; однако пример конфигурации не включен в файл конфигурации filesystems.php по умолчанию. Если вам нужно настроить файловую систему FTP, вы можете использовать приведенный ниже пример конфигурации:

Конфигурация драйвера SFTP

Прежде чем использовать драйвер SFTP, вам необходимо установить пакет Flysystem SFTP с помощью диспетчера пакетов Composer:

Интеграция Laravel Flysystem отлично работает с SFTP; однако пример конфигурации не включен в файл конфигурации filesystems.php по умолчанию. Если вам нужно настроить файловую систему SFTP, вы можете использовать приведенный ниже пример конфигурации:

Файловые системы, совместимые с Amazon S3

По умолчанию файл конфигурации файловой системы вашего приложения содержит конфигурацию диска для диска s3. Помимо использования этого диска для взаимодействия с Amazon S3, вы можете использовать его для взаимодействия с любой службой хранения файлов, совместимой с S3, такой как MinIO или DigitalOcean Spaces.

Как правило, после обновления учетных данных диска в соответствии с учетными данными службы, которую вы планируете использовать, вам нужно только обновить значение параметра конфигурации URL. Значение этого параметра обычно определяется через переменную среды AWS_ENDPOINT:

Получение экземпляров дисков

Фасад хранилища можно использовать для взаимодействия с любым из ваших настроенных дисков. Например, вы можете использовать метод put на фасаде, чтобы сохранить аватар на диске по умолчанию. Если вы вызываете методы на фасаде хранилища без предварительного вызова метода диска, метод будет автоматически передан на диск по умолчанию:

Если ваше приложение взаимодействует с несколькими дисками, вы можете использовать метод disk на фасаде Storage для работы с файлами на определенном диске:

Диски по запросу

Иногда вам может понадобиться создать диск во время выполнения, используя заданную конфигурацию, но эта конфигурация фактически не присутствует в файле конфигурации файловой системы вашего приложения. Для этого вы можете передать массив конфигурации методу сборки фасада хранилища:

Получение файлов

Метод get можно использовать для извлечения содержимого файла. Необработанное строковое содержимое файла будет возвращено методом. Помните, что все пути к файлам должны указываться относительно «корневого» местоположения диска:

Метод exists можно использовать для определения существования файла на диске:

Метод отсутствия может использоваться для определения отсутствия файла на диске:

Скачивание файлов

URL-адреса файлов

Вы можете использовать метод url, чтобы получить URL для данного файла. Если вы используете локальный драйвер, он обычно просто добавляет /storage к заданному пути и возвращает относительный URL-адрес файла. Если вы используете драйвер s3, будет возвращен полный удаленный URL-адрес:

При использовании локального драйвера все файлы, которые должны быть общедоступными, должны быть помещены в каталог storage/app/public. Кроме того, вы должны создать символическую ссылку в public/storage, которая указывает на каталог storage/app/public.

При использовании локального драйвера возвращаемое значение url не закодировано в URL. По этой причине мы рекомендуем всегда сохранять ваши файлы с использованием имен, которые будут создавать действительные URL-адреса.

Временные URL

Если вам нужно указать дополнительные параметры запроса S3, вы можете передать массив параметров запроса в качестве третьего аргумента в методtempementUrl:

Если вам нужно настроить способ создания временных URL-адресов для определенного диска хранилища, вы можете использовать метод buildTemporaryUrlsUsing. Например, это может быть полезно, если у вас есть контроллер, позволяющий загружать файлы, хранящиеся на диске, который обычно не поддерживает временные URL-адреса. Обычно этот метод следует вызывать из метода загрузки поставщика услуг:

Настройка хоста URL

Если вы хотите предварительно определить хост для URL-адресов, сгенерированных с помощью фасада хранилища, вы можете добавить параметр URL-адреса в массив конфигурации диска:

Метаданные файла

Помимо чтения и записи файлов, Laravel также может предоставлять информацию о самих файлах. Например, метод size можно использовать для получения размера файла в байтах:

Метод lastModified возвращает отметку времени UNIX последнего изменения файла:

Пути к файлам

Вы можете использовать метод path, чтобы получить путь к данному файлу. Если вы используете локальный драйвер, это вернет абсолютный путь к файлу. Если вы используете драйвер s3, этот метод вернет относительный путь к файлу в корзине S3:

Хранение файлов

Метод put может использоваться для сохранения содержимого файла на диске. Вы также можете передать ресурс PHP методу put, который будет использовать базовую поддержку потока Flysystem. Помните, что все пути к файлам должны указываться относительно «корневого» местоположения, настроенного для диска:

Ошибка записи

Если метод put (или другие операции записи) не может записать файл на диск, будет возвращено значение false:

При желании вы можете определить параметр throw в массиве конфигурации диска вашей файловой системы. Когда этот параметр определен как true , методы "записи", такие как put, будут создавать экземпляр League\Flysystem\UnableToWriteFile при сбое операций записи:

Добавление и добавление к файлам

Методы prepend и append позволяют записывать в начало или конец файла:

Копирование и перемещение файлов

Метод копирования можно использовать для копирования существующего файла в новое место на диске, а метод перемещения можно использовать для переименования или перемещения существующего файла в новое место:

Автоматическая трансляция

В отношении метода putFile следует отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод putFile генерирует уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем изучения MIME-типа файла. Путь к файлу будет возвращен методом putFile, поэтому вы можете сохранить путь, включая сгенерированное имя файла, в своей базе данных.

Методы putFile и putFileAs также принимают аргумент для указания "видимости" сохраненного файла. Это особенно полезно, если вы храните файл на облачном диске, таком как Amazon S3, и хотите, чтобы файл был общедоступным через сгенерированные URL-адреса:

Загрузка файлов

В веб-приложениях одним из наиболее распространенных вариантов использования для хранения файлов является хранение загруженных пользователем файлов, таких как фотографии и документы. Laravel позволяет очень легко хранить загруженные файлы, используя метод store в экземпляре загруженного файла. Вызовите метод store с указанием пути, по которому вы хотите сохранить загруженный файл:

В этом примере следует отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод store создает уникальный идентификатор, который будет служить именем файла. Расширение файла будет определено путем изучения MIME-типа файла. Путь к файлу будет возвращен методом store, чтобы вы могли сохранить путь, включая сгенерированное имя файла, в своей базе данных.

Вы также можете вызвать метод putFile на фасаде хранилища, чтобы выполнить ту же операцию хранения файлов, что и в приведенном выше примере:

Указание имени файла

Если вы не хотите, чтобы имя файла автоматически присваивалось вашему сохраненному файлу, вы можете использовать метод storeAs, который получает в качестве аргументов путь, имя файла и (необязательно) диск:

Вы также можете использовать метод putFileAs на фасаде хранилища, который будет выполнять ту же операцию хранения файлов, что и в приведенном выше примере:

Непечатаемые и недопустимые символы Юникода будут автоматически удалены из путей к файлам. Поэтому вы можете захотеть очистить пути к файлам, прежде чем передавать их методам хранения файлов Laravel. Пути к файлам нормализуются с помощью метода League\Flysystem\WhitespacePathNormalizer::normalizePath.

Указание диска

По умолчанию метод хранения этого загруженного файла будет использовать ваш диск по умолчанию. Если вы хотите указать другой диск, передайте имя диска в качестве второго аргумента метода хранилища:

Если вы используете метод storeAs, вы можете передать имя диска в качестве третьего аргумента метода:

Другая информация о загруженном файле

Если вы хотите получить исходное имя и расширение загруженного файла, вы можете сделать это с помощью методов getClientOriginalName и getClientOriginalExtension:

Однако имейте в виду, что методы getClientOriginalName и getClientOriginalExtension считаются небезопасными, поскольку имя и расширение файла могут быть изменены злоумышленником. По этой причине обычно следует отдавать предпочтение методам hashName и extension, чтобы получить имя и расширение для данного загружаемого файла:

Видимость файла

В интеграции Laravel с Flysystem «видимость» — это абстракция прав доступа к файлам на нескольких платформах. Файлы могут быть объявлены общедоступными или частными. Когда файл объявляется общедоступным, вы указываете, что файл обычно должен быть доступен для других. Например, при использовании драйвера S3 вы можете получать URL-адреса общедоступных файлов.

Вы можете установить видимость при записи файла с помощью метода put:

Если файл уже был сохранен, его видимость можно получить и установить с помощью методов getVisibility и setVisibility:

При работе с загруженными файлами вы можете использовать методы storePublicly и storePubliclyAs, чтобы сохранить загруженный файл в открытом доступе:

Локальные файлы и видимость

При использовании локального драйвера общедоступная видимость преобразуется в разрешения 0755 для каталогов и разрешения 0644 для файлов. Вы можете изменить сопоставления разрешений в файле конфигурации файловой системы вашего приложения:

Удаление файлов

Метод удаления принимает одно имя файла или массив файлов для удаления:

При необходимости вы можете указать диск, с которого следует удалить файл:

Каталоги

Получить все файлы в каталоге

Метод files возвращает массив всех файлов в заданном каталоге. Если вы хотите получить список всех файлов в данном каталоге, включая все подкаталоги, вы можете использовать метод allFiles:

Получить все каталоги в каталоге

Метод каталогов возвращает массив всех каталогов в заданном каталоге. Кроме того, вы можете использовать метод allDirectories для получения списка всех каталогов в данном каталоге и всех его подкаталогах:

Создать каталог

Метод makeDirectory создаст указанный каталог, включая все необходимые подкаталоги:

Удалить каталог

Наконец, метод deleteDirectory можно использовать для удаления каталога и всех его файлов:

Пользовательские файловые системы

Интеграция Laravel Flysystem обеспечивает поддержку нескольких «драйверов» из коробки; однако Flysystem не ограничивается ими и имеет адаптеры для многих других систем хранения. Вы можете создать собственный драйвер, если хотите использовать один из этих дополнительных адаптеров в своем приложении Laravel.

Чтобы определить пользовательскую файловую систему, вам понадобится адаптер Flysystem. Давайте добавим в наш проект поддерживаемый сообществом адаптер Dropbox:

Далее вы можете зарегистрировать драйвер в методе загрузки одного из поставщиков услуг вашего приложения. Для этого следует использовать метод extend фасада Storage:

Первый аргумент метода расширения — это имя драйвера, а второй — замыкание, которое получает переменные $app и $config.Закрытие должно возвращать экземпляр Illuminate\Filesystem\FilesystemAdapter . Переменная $config содержит значения, определенные в config/filesystems.php для указанного диска.

После того как вы создали и зарегистрировали поставщика услуг расширения, вы можете использовать драйвер Dropbox в файле конфигурации config/filesystems.php.

Laravel – это платформа веб-приложений с выразительным и элегантным синтаксисом. Мы считаем, что разработка должна быть приятным и творческим опытом, чтобы быть действительно полезным. Laravel пытается облегчить разработку, упрощая общие задачи, используемые в большинстве веб-проектов.

В практике программирования мы обычно используем другой код, чтобы чего-то достичь. Но мы всегда находим, как лучше сделать :).

Аналогично для расширения файла извлечения в PHP мы видели различные скрипты для достижения этого. Я собираюсь объяснить все способы сделать это. В приведенном ниже примере я объясняю пять типов скриптов для извлечения расширения файла в php.

В ‘banner.jpg’ мы хотим извлечь сюда расширение файла ‘jpg’.

Сценарий 1: - взорвать файловую переменную и получить последний элемент массива, это будет расширение файла.

Сценарий 2. Найдите последнее вхождение '.' в имени файла, он вернет '.jpg', а затем удалите первый символ строки, используя substr(strrhr($fileName, '.'), 1) это вернет точное расширение файла '.jpg'

Сценарий 3. В третьем подходе мы используем strrpos, чтобы найти позицию последнего вхождения «.» в имени файла и увеличить эту позицию на 1, чтобы разбить строку из (.)

Сценарий 4. В подходе preg_replace мы используем поиск и замену по регулярным выражениям. В функции preg_replace первый параметр — это шаблон для поиска, второй параметр $1 — это ссылка на то, что соответствует первому (.*), а третий параметр — это имя файла.

Сценарий 5:-
Пришло время узнать о php-функции pathinfo(), pathinfo() возвращает информацию о файле. Если второй необязательный параметр не передан, он вернет ассоциативный массив, содержащий имя каталога, базовое имя, расширение и имя файла. Если передан второй параметр, он вернет конкретную информацию (как в приведенном ниже примере мы передали PATHINFO_EXTENSION, чтобы получить расширение файла)

Поэтому, на мой взгляд, избегайте операций со строками и сопоставления регулярных выражений для извлечения расширения. Было бы лучше использовать функцию pathinfo() для извлечения расширения в php.

О Рупендре

Инженер DevOps, путешественник, имеющий опыт работы с различными инструментами и технологиями DevOps, включая Jenkins, TeamCity, Elasticsearch Logstash Kibana (ELK), Ansible и языки сценариев. Я знаком с технологиями с открытым исходным кодом, такими как Cassandra, система очередей RabbitMQ, модерация изображений с использованием Opencv. Мой предыдущий опыт включает веб-разработку на PHP, MySQL, а также PHP cms и фреймворк; Технологии пользовательского интерфейса HTML5, CSS3, JQUERY, BOOTSTRAP и адаптивный дизайн.

Функция glob() — это встроенная функция PHP, которая используется для поиска определенных файлов или папок на основе шаблона. Он возвращает имена файлов и папок в массиве, соответствующем шаблону. Как эту функцию можно использовать для поиска конкретных файлов или папок, показано в этом руководстве.

Синтаксис:

Синтаксис функции glob() приведен ниже. Эта функция может принимать два аргумента. Первый аргумент принимает значение шаблона, которое будет использоваться для поиска файла и папки. Второй аргумент является необязательным и используется для генерации вывода различными способами. Общие символы, используемые для определения шаблона, и различные типы флагов, которые можно использовать во втором аргументе этой функции, описаны ниже.

Часто используемые символы в шаблоне

< td>Используется для соответствия диапазону символов.
Шаблон Назначение
? Это используется для соответствия ровно одному символу (любому).
* Используется для соответствия нулю или более символов.
\ Используется для экранирования символов при использовании флага GLOB_NOESCAPE.
[…]

Пометить значения

В необязательном аргументе функции glob() можно использовать следующие значения флагов.

Значение Назначение
GLOB_MARK Добавляет косая черта с каждым возвращаемым элементом.
GLOB_NOSORT Возвращает несортированные файлы, которые появляются в каталоге.
GLOB_NOCHECK Возвращает шаблон поиска, если совпадений не найдено.
GLOB_NOESCAPE Использует обратную косую черту и не метасимволы заключаются в кавычки.
GLOB_BRACE Расширяет символы из группы для соответствия.
GLOB_ONLYDIR Возвращает список каталогов, который соответствует только шаблону.
GLOB_ERR Используется для остановки при возникновении ошибки происходит.

Пример 1. Чтение всех файлов PHP с использованием символа «*»

В следующем примере показан способ поиска всех файлов PHP в текущем местоположении с использованием шаблона *.php. Создайте файл PHP со следующим скриптом.

Шаблон будет искать любое имя файла с расширением PHP. Возвращаемое значение функции представляет собой массив, который будет напечатан в качестве вывода.

Вывод:

После запуска скрипта с сервера появится следующий вывод. Он показывает, что в текущем местоположении существует пять файлов PHP.


Пример 2. Чтение определенных текстовых файлов с использованием символа «?»

В следующем примере выполняется поиск всех текстовых файлов, имя которых состоит из пяти символов. Создайте файл PHP со следующим скриптом.

Файл ‘. txt» используется для поиска текстового файла с пятисимвольным именем файла. Результатом функции glob() является массив, который хранится в переменной $files. Значения этой переменной выводятся с помощью цикла foreach.


//Чтение конкретных имен текстовых файлов текущего местоположения
$files = glob (".txt" ) ;
//Вывести имена файлов
foreach ( $files as $file ) <
echo "" . $ файл . "
";
>
?>

Вывод:

После запуска скрипта с сервера появится следующий вывод. Он показывает, что в текущем местоположении существуют два текстовых файла в соответствии с шаблоном.


Пример 3. Чтение всех файлов в текущем местоположении с помощью цикла

В следующем примере выполняется поиск всех типов файлов из текущего местоположения и печать имен файлов в каждой строке с использованием цикла. Шаблон ‘*.*’ используется в функции glob() для поиска любого файла любого типа. Возвращаемое значение функции хранится в массиве $files. Затем из результатов поиска подсчитывается общее количество файлов. Цикл foreach используется для печати значений массива в каждой строке.

//Прочитать все имена файлов в текущем местоположении
$files = glob ("*.*" );
//Подсчитываем общее количество файлов
$count = count ( $files ) ;
echo "Всего файлов = $count

" ;
echo "Файлы:
" ;
//Вывести имена файлов
foreach ( $files as $file ) <
echo " " . $file . "
" ;
>
?>

Вывод:

После запуска скрипта с сервера появится следующий вывод. Он показывает, что в текущем местоположении существует шесть файлов.


Пример 4: Поиск файла, который начинается с определенного символа

В следующем примере выполняется поиск в файле PHP, который начинается с символа «g». Создайте файл PHP со следующим скриптом.

'g*.php' используется в качестве шаблона для поиска файлов. Как и в предыдущих примерах, возвращаемое значение функции glob() сохраняется в массиве, который затем распечатывается с помощью цикла foreach.


//Файл поиска начинается с 'g'
$files = glob ("g*.php" );
//Распечатать файлы
foreach ( $files as $file ) <
echo $file . "
" ;
>
?>

Вывод:

После запуска скрипта с сервера появится следующий вывод. Он показывает, что четыре файла PHP существуют в текущем местоположении, где файлы начинаются с символа «g».


Пример 5. Чтение всех файлов и папок

Шаблон, использованный во всех предыдущих примерах, искал только файлы из текущего местоположения. В следующем примере показан способ поиска всех файлов и папок в текущем местоположении. Создайте файл PHP со следующим скриптом.

'*' используется в качестве шаблона в функции glob() для поиска всех файлов и папок. Возвращаемые значения функции сохраняются в массиве, который печатается позже.


//Чтение всех файлов и папок текущего местоположения
$files = glob ("*" ) ;
//Печать файлов и папок
foreach ( $files as $file ) <
echo $file . "
" ;
>
?>

Вывод:

После запуска скрипта с сервера появится следующий вывод. Он показывает, что в текущем местоположении существует пять файлов PHP, три текстовых файла и две папки.


Заключение

В этом руководстве показаны методы поиска любого файла или папки с использованием функции PHP glob(). Файл можно искать по расширению, начальному символу или по общему количеству символов. Надеемся, что использование функции glob() в PHP станет понятнее и проще для читателей после того, как вы попрактикуетесь на примерах из этого руководства.

Об авторе

Фахмида Есмин

Я веду курсы веб-программирования. Мне нравится писать статьи или учебные пособия на различные темы в области ИТ. У меня есть канал на YouTube, на котором публикуются различные учебные пособия по Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel и т. д.: Справка Tutorials4u.

Visual Studio Code — отличный редактор для разработки на PHP. Вы получаете такие функции, как подсветка синтаксиса и сопоставление скобок, IntelliSense (завершение кода) и фрагменты из коробки, и вы можете добавлять дополнительные функции с помощью расширений VS Code, созданных сообществом.

Линтинг

VS Code использует официальный линтер PHP ( php -l ) для диагностики языка PHP. Это позволяет VS Code оставаться в курсе улучшений PHP linter.

Совет: используете XAMPP? Установите полную версию PHP, чтобы получить библиотеки разработки.

Есть три параметра для управления линтером PHP:

  • php.validate.enable: определяет, следует ли вообще включать линтинг PHP. Включено по умолчанию.
  • php.validate.executablePath : указывает на исполняемый файл PHP на диске. Установите это значение, если исполняемый файл PHP отсутствует в системном пути.
  • php.validate.run : определяет, запускается ли проверка при сохранении (значение: "onSave" ) или при типе (значение: "onType" ). По умолчанию сохранено.

Чтобы изменить настройки PHP, откройте настройки пользователя или рабочей области ( ⌘, (Windows, Linux Ctrl+, ) ) и введите «php», чтобы отфильтровать список доступных настроек.

показать настройки PHP

Чтобы задать путь к исполняемому файлу PHP, выберите ссылку Изменить в settings.json в разделе PHP > Проверить: путь к исполняемому файлу, после чего откроется ваш пользовательский файл settings.json. Добавьте параметр php.validate.executablePath с путем к вашей установке PHP:

Окна:

Linux и macOS:

Фрагменты

Visual Studio Code включает набор стандартных фрагментов кода для PHP. Чтобы получить к ним доступ, нажмите ⌃Пробел (Windows, Linux Ctrl+Пробел ), чтобы получить контекстно-зависимый список.

Фрагменты PHP

Расширения PHP

В VS Code Marketplace доступно множество языковых расширений PHP, и в настоящее время создаются новые. Вы можете искать расширения PHP в VS Code в представлении «Расширения» ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ), а затем отфильтровать раскрывающийся список расширений, введя «php».

Поиск PHP в представлении расширений

Отключить встроенную поддержку PHP

Чтобы отключить встроенные интеллектуальные дополнения PHP в пользу предложений из установленного расширения PHP, снимите флажок PHP > Предложить: базовый, который установит для php.suggest.basic значение false в файле settings.json.

Отладка

Отладка PHP с помощью XDebug поддерживается через расширение PHP Debug. Следуйте инструкциям расширения по настройке XDebug для работы с VS Code.

Читайте также: