Перезапись файла настроек

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
Аватара пользователя
k907
Сообщения: 322
Зарегистрирован: 21 май 2014, 20:32

Перезапись файла настроек

Сообщение k907 » 22 апр 2020, 17:27

Иногда хуман сбрасывает настройки на дефолтные.
При старте скрипта пытаюсь проверить настройки, если они отличаются от шаблона перезаписываю файлы settings_v1.json / settings_v1.json.bak
Но программа не видит новые настройки.
Подскажите, пожалуйста, как можно решить эту проблему?



    $path_file_script = путь к скрипту

    $path_file_settings_xhe = $app->get_program_folder()."\\Settings\settings_v1.json";
    $path_file_settings_xhe_bak = $app->get_program_folder()."\\Settings\settings_v1.json.bak";


    $content = file_get_contents($path_file_settings_xhe);

    $content = preg_replace("/^[^{]+?{/is", "{" ,$content);
    $arr_settings = json_decode($content, true);

	// шаблон настроек:
	$settings_template = '{
	  "AutoChangePortByStart": false, 
	  "ShowLineNumeration": true,
	  "IsolateTabs": false, 
	  "AutoCorrectOfMouse": false, 
	  "MinimizeToTray": true,
	  "MinimizeToTrayByStart": true,
	  "HideTrayIconByStart": false,
	  "ClearCacheFolderByStart": true,
	  "ClearCookiesFolderByStart": true,
	  }';

    $arr_setting_template = json_decode($settings_template, true);

    foreach ( $arr_setting_template as $key => $value ) {

      if ( $value  !== $arr_settings[$key] ) {

        decho ("Свойство $key не соответствует шаблону:  $value | ".$arr_settings[$key] );
        // обновим json
        $arr_settings[$key] = $value;
	$flag_update = true;

      }
    }

    if ($flag_update) {
      decho ("Перезапустим программу с обновленными настройками");
      $update = json_encode($arr_settings);

      write_file($path_file_settings_xhe,  $update);
      write_file($path_file_settings_xhe_bak,  $update);

      sleep(15);
      $app->restart($path_file_script,"",$app->get_port(),"","",10);
    }


//--------------------------------------------------
function write_file($path,$str, $mode = "w", $wait = 5000000  )
{
	$res  = false;
	$ind = 0;

	if (!file_exists(dirname($path))) {
		echo " Ошибка записи, директория не существует!<br>";
		return false;
	}

	while ($res === false and $ind  <= $wait )  {
	 $f = @fopen( "$path","$mode");
	 $res = @fputs($f,"$str");
	 usleep(100000);
	 $ind ++;
	 @fclose($f);
	}

	if ( $ind  > $wait) {
	return false;
	}
	else
	return true;
}
Разработка решений для автоматизации вашего бизнеса. Telegram: https://t.me/k90_7

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Перезапись файла настроек

Сообщение bigfozzy » 22 апр 2020, 18:56

По настройкам улучшили механизм - теперь не должно затирать файл при рестратах.

чуть позже обновим.

Аватара пользователя
k907
Сообщения: 322
Зарегистрирован: 21 май 2014, 20:32

Re: Перезапись файла настроек

Сообщение k907 » 22 апр 2020, 19:50

Спасибо, жду обновление.
Разработка решений для автоматизации вашего бизнеса. Telegram: https://t.me/k90_7

Ответить