Внезапно: этот пост про php, веб и всякое такое. С php я сталкиваюсь очень-очень редко и, возможно, из кода, приведённого ниже, это будет заметно. Заранее прошу понять и простить.
Сначала обрисую в общих чертах за какими такими приключениями я отправился в чуждый для меня мир php.
Некоторое время назад я занимался разработкой браузера на основе WebView2, который должен отображать страницу локального веб-приложения. При загрузке браузер забирает URL и все остальные настройки из файла конфигурации (app.exe.config).
Вся сложность заключалась в том, что каждый экземпляр программы, запущенный на удалённом хосте, должен принимать свой уникальный url-адрес, который может периодически меняться. И вот когда количество запущенных экземпляров программы перешагнуло за первый десяток и менять адрес вручную в каждом конфиг-файле стало сложновато — пришлось автоматизировать создание файлов конфигурации.
Ссылки на страницы генерировались по мере добавления объектов в базу данных веб-приложения на основе идентификатора записи. На странице администратора веб-приложения был отдельный блок с перечнем сгенерированных ссылок для клиентов, но это нисколько не облегчало работу.
Заниматься бесконечной копипастой url в файл конфигурации — путь смирившихся. Нам же — отчаянным — нужно чтобы всё было автоматизировано. Было решено создать php-скрипт, который бы порождал app.exe.config. Почерпнув азы из официальной документации языка, я отправился искать удачу. В итоге получился вот такой скрипт config.php:
<?php
$url = $_GET['url'];
header("Content-type: application/xml");
header("Content-Disposition: attachment; filename=APPNAME.exe.config");
print '<?xml version="1.0" encoding="utf-8"?>' . PHP_EOL;
print "<configuration>" . PHP_EOL;
print "<startup>" . PHP_EOL;
print '<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>' . PHP_EOL;
print "</startup>" . PHP_EOL;
print "<appSettings>" . PHP_EOL;
print '<add key="URL" value="'.$url.'"/>' . PHP_EOL;
print '</appSettings>' . PHP_EOL;
print '</configuration>' . PHP_EOL;
print $content;
?>
Так как app.exe.config, по своей сути, xml документ — первым делом объявляем тип контента в заголовке создаваемого файла. Там же присваиваем документу тип скачиваемого файла и его имя (filename приравниваем к нужному имени файла). Остальное переносим из существующего файл конфигурации.
Имейте в виду, что в нужном блоке ключ-значение нужно обозначить переменную, которая подтягивается из принимаемого параметра.
print '<add key="URL" value="'.$url.'"/>' . PHP_EOL;
Таким образом, чтобы создать файл конфигурации с URL адресом этого сайта достаточно пройти в браузере по ссылке на php-скрипт, указав ему параметр url:
http://local_domain/config.php?url=https://ngdream.ru
Если в файле конфигурации используется больше одного параметра, придётся прописывать их в теле скрипта. В каком виде атрибуты будут закреплены — решать Вам.
Ну, и раз зашла тема — сгенерируем файл ini. Этот формат я использую в проектах IDE Lazarus.
<?php
$section = $_GET['section'];
$value = $_GET['value'];
$key = $_GET['key'];
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=settings.ini");
print '[' . $section . ']' . PHP_EOL;
print $value . ' = ' . $key . PHP_EOL;
print $content;
?>
Как видите, здесь код куда проще и понятнее. Скрипт получает секцию конфигурации, ключ и его значение, а затем формирует файл settings.ini.
Ссылка для генерации файла будет выглядеть примерно вот так:
http://domain/config.php?section=test&value=test1&key=test3