Очень хороший вопрос, только вы путаете файл с настройками и файл первоначальной настройки приложения.
Вам нужны оба.
1. файл c настройками
Их должно быть
два.
Первый файл называется config.sample.php, он содержит только один массив, который заполняется пустыми/дефолтными значениями и может содержать не только настройки БД но и содержать другие секции:
<?php
return [
'db' => [
'hostname' => '',
'username' => '',
'password' => '',
'database' => '',
],
];
Этот файл
добавляется в репозиторий.
Второй файл называется config.php и он создается руками каждый раз при установке CMS на новом сервере. В него пишутся актуальные настройки для каждого сервера.
Этот файл
не добавляется в репозиторий (а добавляется, соответственно, в .gitignore).
2. Файл первоначальной настройки приложения.
В него идут команды, которые пишутся на любой странице: подключение к БД, старт сессии, всякие инклюды и прочее. Кроме того, в этом файле должен быть код
if (!file_exists('config.php'))
{
$msg = 'Создайте файл config.php на основе config.sample.php и внесите в него настройки';
throw new RuntimeException($msg);
}
Таким образом система будет помогать программисту, если он забыл создать config.php с актуальными для конкретного сервера настройками.
И вот этот файл, назовем его init.php, уже и подключаем во все остальные файлы.
Кстати, начиная с 8 версии РНР можно писать просто
$conn = mysqli_connect(...$config['db']);
В этом случае ключи массива $config['db'] будут использоваться в качестве имен параметров функции - очень удобно