Чтение INI-файла в PHP
INI-файлы - это обычные текстовые файлы, состоящие из определённых секций. Как правило, INI-файлы используются для сохранения определённых настроек, например, настроек языка. И, разумеется, чтобы наш сайт мог легко изменяться тем или иным образом, можно все параметры, отвечающие за это изменение, поместить в отдельный файл. И как быстро извлечь в PHP из этого файла все настройки мы и разберём в этой статье.
Для чтения INI-файла в PHP используется функция parse_ini_file(). Но прежде, чем её использовать, создадим INI-файл "settings.ini":
Par1=10
Par2=20
В этом файле мы описали два параметра и присвоили им определённые значения. А теперь создадим PHP-файл, в котором считаем данные из созданного файла с помощью функции parse_ini_file():
<?php
$arr = parse_ini_file("settings.ini");
print_r($arr);
?>
В результате, Вы увидите следующую строку: "Array ( [Par1] => 10 [Par2] => 20 )". Как видите, функция parse_ini_file() вернула массив с ключами в виде названия параметров и значениями в виде тех, что мы задавали в файле "settings.ini".
Теперь разберём пример из реальной практики. Сделаем одну страничку, которая будет выводить текст на языке, заданным GET-параметром. Для начала создадим INI-файл "lang_en.ini":
HELLO=Hello
WORLD=world
Теперь создадим PHP-скрипт:
<?php
$lang = isset($_GET['lang'])? $_GET['lang']: "en";
$langconst = parse_ini_file("lang_$lang.ini");
echo $langconst['HELLO']." ".$langconst['WORLD']."!";
?>
Первой строкой мы проверяем: если был передан GET-параметр lang, то тогда считываем оттуда значение и записываем в переменную lang. А если никакого значения передано не было, то устанавливаем значение по умолчанию, в нашем случае: "en". Дальше мы обращаемся к файлу нужного языка и вытаскиваем оттуда данные. Затем уже просто выводим строку, используя полученные языковые константы. В результате, мы увидим: "Hello World!".
А теперь пришла пора доказать, почему это так удобно. Для того, чтобы добавить новый язык достаточно создать лишь ещё один файл, где перевести все языковые константы:
HELLO=Привет
WORLD=мир
Сохраните данный файл под названием "lang_ru.ini", и запустите скрипт: "адрес_скрипта.php?lang=ru". В результате, Вы увидите: "Привет мир!".
Как видите, мы создали лишь ещё один INI-файл, перевели константы на нужный язык и всё! Таким образом, Вы легко можете создать несколько языковых версий Вашего сайта, что смотрится очень здорово, а, главное, реализация этого достаточно простая.
-
- Михаил Русаков
Комментарии (10):
Здравствуйте, Михаил. Спасибо Вам за Ваши стать по PHP - очень помогают в начале освоения этого языка. Конкретно к теме по парсингу ini-фала, а точнее, выбора языка: Данный скрипт я оформил в виде функции выбора языка и создал две ссылки-переключателя, RUS и ENG. Всё работает..в пределах 1-ой страницы. А вот при навигации по сайту опять вылазит "дефолтовый" язык. Вопрос: Как реализовать "наследственность" (не знаю как еще это назвать) языка для навигации. Чтоб не приходилось постоянно кликать на выбор языка при переходе на другую страницу сайта. Заранее благодарю за ответ-совет.
Ответить
Добавлю для ясности приведу свой "ремейк"-скрипт: <?php function langsel ($t){ $lang = isset($_GET['lang'])? $_GET['lang']: "en"; $langconst = parse_ini_file("lang_$lang.ini"); echo $langconst[$t];} ?> а где нужно подставляю следующее: <?php langsel("CONT")?> <--в ini-файлах CONT=Контакты(Contacts)
Ответить
Попробуйте хранить значение выбранного языка в куки, и на каждой странице сверяться с ними.
Ответить
Ок, спасибо. Попробую.
Ответить
В строке $langconst = parse_ini_file("lang_$lang.ini"); непонятно, что такое в кавычках - lang_$lang.ini
Ответить
Это имя файла, например, lang_ru.ini
Ответить
Получается весь контент сайта нужно переводить по слову? Это же коллосальная работа, а не проще ли параллельно создать несколько версий сайта и делать редирект с основной версии сайта с помощью header?
Ответить
что означает знак вопроса и двоеточие в строке $lang = isset($_GET['lang'])? $_GET['lang']: "en";
Ответить
Здравствуйте Михаил. Я только недавно начал учить PHP Я ввел скрип как на вашем примере: <?php $lang = isset($_GET['lang'])? $_GET['lang']: "en"; $langconst = parse_ini_file("lang_$lang.ini"); echo $langconst['HELLO']." ".$langconst['WORLD']."!"; ?> но у меня в браузере выходит только "world!" Объясните пожалуйста, что не так? или может Вы ощиблись при вводе скрипта?
Ответить
Михаил а возможна ли реализация чтения text.ini в tpl файлах?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.