Php ini scanned files: примеры (PHP)
php_ini_scanned_files: string|falseОписание функции php_ini_scanned_files
Функция php_ini_scanned_files возвращает список дополнительных ini-файлов, которые были обработаны после основного файла конфигурации php.ini. Данная функция применяется для получения информации о расположении и количестве дополнительных конфигурационных файлов, которые загружаются из директории, указанной в параметре конфигурации --with-config-file-scan-dir во время компиляции PHP.
Функция принимает один необязательный аргумент:
$separator(string) - разделитель, который будет использоваться между именами файлов. По умолчанию используется запятая (,).
Если параметр не задан, имена файлов будут разделены запятыми. При указании строки-разделителя, имена файлов будут объединены в строку с использованием этого разделителя.
Базовые примеры использования
<?php
$files = php_ini_scanned_files();
echo $files;
?>/etc/php/8.2/cli/conf.d/20-opcache.ini,/etc/php/8.2/cli/conf.d/10-mysqlnd.ini
<?php
$files = php_ini_scanned_files("\n");
echo "Сканированные файлы:\n" . $files;
?>Сканированные файлы: /etc/php/8.2/cli/conf.d/20-opcache.ini /etc/php/8.2/cli/conf.d/10-mysqlnd.ini
<?php
$files = php_ini_scanned_files();
if (empty($files)) {
echo "Дополнительные конфигурационные файлы не найдены.";
}
?>Дополнительные конфигурационные файлы не найдены.
Похожие функции в PHP
Возвращает путь к основному загруженному файлу php.ini. Используется, когда требуется узнать расположение основного конфигурационного файла, а не дополнительных.
Возвращает все зарегистрированные конфигурационные настройки. Применяется для получения значений всех директив, а не списка файлов. Удобна для отладки и анализа текущих настроек PHP.
Возвращает массив с именами всех загруженных модулей. Может быть полезной в связке с php_ini_scanned_files для анализа конфигурации расширений.
Альтернативы в других языках программирования
Php ini scanned files в Python
В Python для работы с конфигурационными файлами используется модуль configparser. Аналога функции php_ini_scanned_files не существует, так как Python не использует механизм сканирования директорий для конфигурационных файлов.
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config.sections())['section1', 'section2']
В Node.js конфигурация обычно загружается из файлов .json или .env. Для загрузки нескольких конфигурационных файлов можно использовать модуль dotenv или config.
const fs = require('fs');
const files = fs.readdirSync('/etc/app/config.d/');
console.log(files.filter(f => f.endsWith('.conf')));['db.conf', 'app.conf']
Php ini scanned files в MySQL
MySQL использует параметр командной строки --defaults-extra-file для указания дополнительных конфигурационных файлов. Для получения списка загруженных конфигурационных файлов можно выполнить запрос SHOW VARIABLES.
SHOW VARIABLES LIKE 'config_file';+---------------+---------------------+ | Variable_name | Value | +---------------+---------------------+ | config_file | /etc/mysql/my.cnf | +---------------+---------------------+
Типичные ошибки при использовании
Функция возвращает строку, а не массив. Для работы с отдельными файлами необходимо разбить строку.
<?php
$files = php_ini_scanned_files();
// Ошибочный подход
foreach ($files as $file) {
echo $file;
}
?>Warning: Invalid argument supplied for foreach()
Если директория для сканирования не настроена, функция вернет пустую строку.
<?php
$files = php_ini_scanned_files(",");
$fileArray = explode(",", $files);
echo count($fileArray);
?>1
Даже при пустом результате explode создаст массив с одним элементом - пустой строкой.
Изменения в последних версиях PHP
Начиная с PHP 8.0, функция php_ini_scanned_files не претерпела значительных изменений в поведении или синтаксисе. Однако в PHP 8.1 были улучшены сообщения об ошибках для функций работы с конфигурацией. В PHP 8.2 не было внесено изменений, затрагивающих данную функцию.
Важное замечание: в PHP 7.4 и более ранних версиях функция могла возвращать FALSE в случае ошибки, но в PHP 8.0 и выше функция всегда возвращает строку.
Расширенные примеры использования
<?php
function getScannedIniFiles() {
$files = php_ini_scanned_files();
if (empty($files)) {
return [];
}
return explode(",", $files);
}
$iniFiles = getScannedIniFiles();
print_r($iniFiles);
?>Array
(
[0] => /etc/php/8.2/cli/conf.d/20-opcache.ini
[1] => /etc/php/8.2/cli/conf.d/10-mysqlnd.ini
)<?php
function isExtensionConfigured($extensionName) {
$files = php_ini_scanned_files();
if (empty($files)) {
return false;
}
$filesArray = explode(",", $files);
foreach ($filesArray as $file) {
if (strpos($file, $extensionName) !== false) {
return true;
}
}
return false;
}
echo isExtensionConfigured('opcache') ? 'Расширение найдено' : 'Расширение отсутствует';
?>Расширение найдено
<?php
$files = php_ini_scanned_files(",");
if (!empty($files)) {
$fileList = explode(",", $files);
foreach ($fileList as $file) {
$file = trim($file);
if (file_exists($file)) {
$size = filesize($file);
echo "Файл: $file, Размер: {$size} байт<br>";
}
}
}
?>Файл: /etc/php/8.2/cli/conf.d/20-opcache.ini, Размер: 245 байт Файл: /etc/php/8.2/cli/conf.d/10-mysqlnd.ini, Размер: 150 байт
<?php
function getScannedFilesInfo() {
$files = php_ini_scanned_files("\n");
if (empty($files)) {
return "Нет дополнительных конфигурационных файлов.";
}
return "Сканированные файлы:\n" . $files;
}
ob_start();
phpinfo();
$phpinfo = ob_get_clean();
echo getScannedFilesInfo();
?>Сканированные файлы: /etc/php/8.2/cli/conf.d/20-opcache.ini /etc/php/8.2/cli/conf.d/10-mysqlnd.ini