Привет, возникла специфичная для меня задача и решение ее через одно место.
В Общем есть такой вот файл cfg_test.php:
<?
class config {
# Настройки сайта
public $start_time = '1670000999';
public $email = 'support@domain.zone'; // Почта
# Админка
public $adm_dir = 'FolderAdm'; // Директория
public $adm_name = 'Admin'; // Логин
public $adm_pass = '00000000'; //
}
?>
С прочтением и выводом формы проблем не возникло:
$configFile = './core/cfg_test.php';
$configContent = file_get_contents($configFile);
function FindAndConvert($var){
// search in $var "public $1 = '$2';"
preg_match_all('/public \$(\w+) = \'([^\']+)\'\;/', $var, $matches, PREG_SET_ORDER);
// create & add Arr
$foundPublicVar = [];
foreach ($matches as $match) {
$foundPublicVar[$match[1]] = $match[2];
}
return $foundPublicVar;
}
// Результат
$findFu = FindAndConvert($configContent);
//print_r($findFu); // Array ( [start_time] => 1670000999 [email] => support@domain.zone [adm_dir] => FolderAdm [adm_name] => Admin [adm_pass] => 00000000 )
вывод формы:
<form action="" method="post" class="m-0">
<?
foreach ($findFu as $row => $value) {
echo '<input class="form-control mb-2" type="text" name="'.$row.'" placeholder="'.$row.'" value="'.$value.'" />';
}
?>
<button type="submit" name="savenewcfg" class="btn btn-success">Сохранить</button>
</form>
Однако имею проблему с записью обратно новых значений. Очевидно что лучшим решением было писать массив в другой файл, а в классе его читать, или же вовсе вместо отдельных полей предоставить вариант редактировать как в блокноте, но не дает покоя именно такой вариант.
Пробовал так:
<?
if (isset($_POST['savenewcfg'])) {
// del butt [name]
foreach ($_REQUEST as $rowArr) {
unset($_REQUEST['savenewcfg']);
}
$newArrF = array();
$conT = $configContent;
foreach ($_REQUEST as $row => $value) {
$str_r = "public \$".$row."= ";
$str_r = $str_r."'".$value."';";
//echo "<br>".$str_r;
$fileContents = preg_replace('/public \$(\w+) = \'([^\']+)\'\;/', $str_r, $conT);
echo json_encode($fileContents, true);
file_put_contents($configFile, $fileContents);
}
//print_r($_REQUEST);
}
но меняет все строки на последнее совпадение:
class config {
# Настройки сайта
public $adm_pass= '00000000';
public $adm_pass= '00000000'; // Почта
# Админка
public $adm_pass= '00000000'; // Директория
public $adm_pass= '00000000'; // Логин
public $adm_pass= '00000000'; //
}
Подскажите в чем косячу