Autor Zpráva
bagocina
Profil
Ahojte.

Potreboval by som čo najľahšie vytvoriť PHP funkciu, ktorá z konfiguračného súboru vyhľadá zadané výrazy podľa podmienky a následne ich zmení za dodané premenné.

Príklad konfiguračného súboru:

sv_password ""
hostname "nazov"
rcon_password "heslo"
sys_ticrate "10000"
sv_maxupdaterate "101"
sv_minupdaterate "100"
sv_maxrate "25000"
sv_minrate "2500"
mp_autokick "0"

Funkcia má vyhľadať napr. hostname, rcon_password, sv_password a ak sú dodané premenné tak zmeniť text medzi " ".

Skúšal som rôznym spôsobom vyhľadať tieto riadky pomocou

preg_match_all('/hostname \"(.*)\"/Us',$text,$match);
foreach($match[1] as $nazov) {
$nazov_vypis = $nazov; 
}

preg_match_all('/sv_password \"(.*)\"/Us',$text,$match);
foreach($match[1] as $sv_password) {
$sv_password_vypis = $sv_password; 
}

preg_match_all('/rcon_password \"(.*)\"/Us',$text,$match);
foreach($match[1] as $heslo) {
$heslo_vypis = $heslo;
}

a nasledne ich upraviť cez

$najst=array 
    (
    "hostname \"$nazov_vypis\"",
    "rcon_password \"$heslo_vypis\""
    );

$nahradit=array
    (
    "hostname \"$csko_name\"",
    "rcon_password \"\""
    );

$vystup=str_replace($najst, $nahradit, $text);  

no potreboval by som to čo najjednoduchšie spojiť do jednej funkcie aby sa jednoducho dali pridávať a vymazávať dané údaje, ktoré sa majú v konfiguračnom súbore meniť.

Ďakujem vopred za pomoc.
abc
Profil
bagocina:
Ahoj,
staci pouzit parse_ini_file(), která ti načte konf. soubor do pole a tam už si vyhledáš podle indexu, změníš a vrátíš zpět...
bagocina
Profil
abc:
Funkcia parse_ini_file() bohužiaľ nevie prečítať konfiguračný súbor, ktorého príklad som uviedol vyššie. Potrebujem aby to vedelo v hocijakom texte vedelo vyhľadať a zmeniť určitú časť, keďže nie všetky konfiguračné súbory sú rovnaké ho typu a majú rovnaký obsah.
Alphard
Profil
Přímé nahrazení bude komplikované, parsujte ten konfigurák do asociativního pole a pak ním pracujte.
Pro úpravách se snad vygeneruje nový soubor, který přepíše ten starý.
bagocina
Profil
Alphard
Nejaká menšia rada ako na to, pretože s kódom ktorý som pozliepal a spravil, sa už ďalej neviem pohnúť ďalej a iný spôsob mi nevie už vôbec napadnúť.

Ďakujem
Alphard
Profil
<?php
$config = array();
foreach (file('config.conf') as $rule)
{
    list($name, $value) = explode(' ', $rule);
    $config[trim($name)] = trim(trim($value), '"\'');
}
print_r($config);

Kdyby snad nějaký řetězec začínal nebo končil apostrofem nebo uvozovkou, byl by to problém, kdyžtak si to upravte.
Keeehi
Profil
// $data - řetězec načtený ze souboru
preg_match_all('~(.*) "(.*)"~',$data,$matches,PREG_SET_ORDER);

$conf = array();
foreach($matches as $match)
    $conf[$match[1]] = $match[2];
    
// práce s honotami
// $conf["hostname"] = "neco jiného"
// konec práce

$out = "";
foreach($conf as $key => $value){
    $out .= "$key \"$value\"\n";
}

// $out - řetězec pro uložení do souboru
bagocina
Profil
Alphard, Keeehi:

Ďakujem vám veľmi pekne za váš čas a poskytnuté kódy. Presne toto som potreboval. Ešte raz ďakujem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: