Czym przetwarzać pliki konfiguracyjne ?

0

Chodzi mi o to że mam plik konfiguracyjny gdzieś w linuxie np taki:

dir=/var/run/secret
update=1

adapter={
     uid="474677294532"
     vid="928833"
     eoi=34
}

Jest jakiś gotowy parser w php żeby np zmienić wartość vid lub update ?

6

Parafrazując to co odpisałeś w innym wątku:

W ogole nie wiemy o czym ty mowisz

;-)

Jeśli to jakiś znany format, spróbuj poszukać po php $nazwaTegoFormatu parser lub ... editor; jeśli nic nie znajdziesz, no to siłą rzeczy będziesz musiał napisać coś własnego; tak na oko ten format nie przypomina mi nic konkretnego.

1

To zrób replace :)

1

Dobra ogarnięte w miare, jakby ktoś chciał to prosze:

$file = "../twoj_plik_konfiguracyjny";
$search_key = 'update';
$new_value = 4;

file_put_contents($file, implode('',
  array_map(function($data) use($search_key, $new_value) {
    return stristr($data, $search_key)
      ? (strpos($data, '"')
        ? $search_key . '="' . $new_value .'"' . PHP_EOL 
          : $search_key . '=' . $new_value . PHP_EOL)
      : $data;
  }, file($file))
));

Wyszukuje sobie najpierw klucz, jeśli klucz istnieje czyli działam w danej lini pliku, to patrze w lini 8 czy zaraz za kluczem jest znak " Jeśli jest to zwracam tak samo wartość w cudzysłowie, bo może to być ciąg znaków ze spacjami na przykład. A jeśli jest to wartość liczbowa czy taka która nie potrzebuje wrapowania w cudzysłów to zwracam taki właśnie wynik w lini 10.

W przypadku gdy wartośc nie zostanie znaleziona zwracam linie 11. Dla danych nie ma znaczenia czy zrobi ktoś to $new_value = 4; czy może $new_value = "4"; O tym czy dana ma być owrapowana decyduje już sam plik konfiguracyjny jaki był wcześniej.

Śmieć jaki jest to jeśli przed linią były 4 spacje odstępu to nie zachowuje spacji tylko je kasuje. więc jak ktoś chce może poprawić.
I drugi śmieć to jeśli macie dwie sekcje np ja mam tutaj sekcje adapter={ i w nim ssid więc jak macie więcej niż jedną sekcje a w niej takie same nazwy kluczy no to trzeba dopisać do parsowania, żeby znalazł najpierw odpowiednią sekcję na przykład:

$file = "../twoj_plik_konfiguracyjny";
$search_key = 'adapter.ssid';
$new_value = 4;

Wtedy żeby szukał sekcji a potem dopiero zmieniał w niej coś. No ale to sprawa rozwojowa, dla mnie na razie styka. jak jest

0

@masterc: Ty, ale Ty wiesz że jak nie wiesz jaki to format, to możesz go uszkodzić przez przypadek? Np spodziewam się że wstawienie cudzysłowa do tej wartości tak po prostu pewnie by zmalformowało ten plik, lub może backslash.

Najlepiej by było jakbyś:

a) powiedział co to za dystrybucja linuxa, albo czy to np jest docker
b) skąd wziąłeś ten plik, w jakiej ścieżce był, pod jaką nazwą był zapisany i z jakim rozszerzeniem,
c) czy należy do Twojego usera czy do roota
d) czy był od początku w Twoim OS'ie, czy stworzyło Ci go, dopiero jak skorzystałeś z jakiejś aplikacji.

może wtedy ktoś się domyśli co to za plik.

PS: Trochę to wygląda jak HCL, ale nie jestem pewien.

3
masterc napisał(a):

Chodzi mi o to że mam plik konfiguracyjny gdzieś w linuxie np taki:

dir=/var/run/secret
update=1

adapter={
     uid="474677294532"
     vid="928833"
     eoi=34
}

Jest jakiś gotowy parser w php żeby np zmienić wartość vid lub update ?

To jest to? https://www.systutorials.com/docs/linux/man/5-wpa_supplicant.conf/

Jest coś takiego jak wpa_cli, to jest program shellowy, przeznaczony do edycji takich plików: https://unix.stackexchange.com/questions/415816/i-am-trying-to-connect-to-wifi-using-wpa-cli-set-network-command-but-it-always-r

1 użytkowników online, w tym zalogowanych: 0, gości: 1