Autor Zpráva
xaverista
Profil
Zdravím,

pomohl by mi prosím někdo? Mám soubor, kde si pomocí webu chci upravovat určité řádky (pomocí formuláře s inputy)

ip=127.0.0.1
port=8080
name=example
level=easy

a pomocí formuláře chci upravit pouze např. pouze hodnotu u ip a name... Jak na to? PS každá hodnota je na novém řádku viz. příklad

Děkuji xaverista
Dan Charousek
Profil
Něco takového by mohlo fungovat:

// klíč který chceš změnit (třeba z formuláře)
$key_to_change = "name";
// hodnota, na kterou chceš měněný klíč změnit
$value_to_set = "new_example";
// název souboru
$file_name = "soubor.txt";

$file = file_get_contents($file_name);
$lines = explode("\n", $soubor);

$new_file_lines = [];

foreach($lines as $line) {

    if(empty(trim($line)))
        continue;

    list($key, $value) = explode("=", $line);
    $new_file_lines[] = $key . "=" . ($key == $key_to_change ? $value_to_set : $value);
    
}

file_put_contents($file_name, implode("\n", $new_file_lines));
Přidal jsem kontrolu prázdných řádků
Taps
Profil
Dan Charousek:
Nebylo by jednodušší použít funkci file?
abc
Profil
Pokud by to bylo možné, doporučil bych změnit formát souboru na ini nebo neon nebo yaml nebo tak něco, co má napsané parsery a dá se s tím snadno pracovat.
xaverista
Profil
abc:
Pokud by to bylo možné, doporučil bych změnit formát souboru
To právě že možné není... Taktéž potřebuji nastavovat více hodnot najednou... A cyklit ten foreach mi přijde blbost...
Dan Charousek
Profil
xaverista:
Taktéž potřebuji nastavovat více hodnot najednou... A cyklit ten foreach mi přijde blbost...

Ta změna není tak komplikovaná, mohl jsi to zkusit :)

// klíč který chceš změnit (třeba z formuláře)
$changes = [
    "ip" => "localhost",
    "port" => "8000"
];

// název souboru
$file_name = "soubor.txt";
 
// můžeš i použít file() jak radí Taps
$file = file_get_contents($file_name);
$lines = explode("\n", $soubor);
 
$new_file_lines = [];
 
foreach($lines as $line) {
 
    if(empty(trim($line)))
        continue;
 
    list($key, $value) = explode("=", $line);
    $new_file_lines[] = $key . "=" . (isset($changes[$key]) ? $changes[$key] : $value);
    
}
 
file_put_contents($file_name, implode("\n", $new_file_lines));
xaverista
Profil
Dan Charousek:
Aha :-) super, moc děkuji

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: