File beolvasás és mentés probléma
Sziasztok!
Egy adatbázis config file szerkesztő kódon dolgozok, de elakadtam...
A script egy formon keresztül kapja meg az új adatokat, mint pl az adatbázis nevét, felhasználót és jelszavát.
Eztután beolvassa az config file-t a file() utasítással, és a megfelelő soroknál kicseréli a szöveget, majd elmenti a file_put_contents()-el.
A gond az, hogy beolvassa a file-t, ki is cseréli a megfelelő sorokban a részeket, majd mikor elmenti, a módosítatlan szöveget menti el... Az érdekesség még, hogyha a file-t kézzel megváltoztatom, akkor is a legelőször beolvasott file tartalmát menti el...
A file tartalma pl.:a formon megadott adatok:
serverName: abc
serverUser: abc
serverPasswd: abc
mikor elmenti, marad a régi tartalom...
mikor kiíratom a beolvasott, és módosított tartalmat, ott semmi gond nincs...
új tartalom a változó kiíratásakor:Ezután kézzel módosítottam a config file-t:A formban megadottak alapján újra szépen kicseréli a megadott karaktereket,
viszont mikor elmenti, akkor a legelső beolvasott tartalmat menti el...
Már újranéztem a változókat, újraindítottam a rendszert, de a legelső beolvasott file tartalma valahogy nagyon beakadt...
Mi állhat a háttérben?
Előre is köszönöm a segítséget!
■ Egy adatbázis config file szerkesztő kódon dolgozok, de elakadtam...
A script egy formon keresztül kapja meg az új adatokat, mint pl az adatbázis nevét, felhasználót és jelszavát.
Eztután beolvassa az config file-t a file() utasítással, és a megfelelő soroknál kicseréli a szöveget, majd elmenti a file_put_contents()-el.
A gond az, hogy beolvassa a file-t, ki is cseréli a megfelelő sorokban a részeket, majd mikor elmenti, a módosítatlan szöveget menti el... Az érdekesség még, hogyha a file-t kézzel megváltoztatom, akkor is a legelőször beolvasott file tartalmát menti el...
A file tartalma pl.:
$config['db']['serverName'] = "";
$config['db']['serverUser'] = "";
$config['db']['serverPasswd'] = "";
serverName: abc
serverUser: abc
serverPasswd: abc
mikor elmenti, marad a régi tartalom...
mikor kiíratom a beolvasott, és módosított tartalmat, ott semmi gond nincs...
új tartalom a változó kiíratásakor:
$config['db']['serverName'] = "abc";
$config['db']['serverUser'] = "abc";
$config['db']['serverPasswd'] = "abc";
$config['db']['serverName'] = "-";
$config['db']['serverUser'] = "-";
$config['db']['serverPasswd'] = "-";
viszont mikor elmenti, akkor a legelső beolvasott tartalmat menti el...
Már újranéztem a változókat, újraindítottam a rendszert, de a legelső beolvasott file tartalma valahogy nagyon beakadt...
Mi állhat a háttérben?
Előre is köszönöm a segítséget!
Kód nélkül?
Gondolom nem onnan olvasol, vagy nem oda írsz, ahova gondolod. Esetleg nem azt, amit gondolsz.
Volt egy hozzászólásom, mikor
Az egyes műveletek után próbáltam kiíratni, hogy mikor mik változnak, és minden teljesen rendben végrehajtódott.
A végén szándékosan hoztam létre másik file-t, mert én is kódhibára gyanakodtam, és így ellenőriztem, hogy mi lesz a végeredmény, de mindig ugyanaz...
Furcsa
Nálam hibátalnul fut ebben a formájában.
Egy osztályban vannak a kódok
Nem lehet, hogy függvények
Sajnos nem... Most átírtam
Az első var_dump( $dbConfigFile ) kiírása szerint a fizikailag betöltött file tartalmazza a változó.
A második szerint tökéletesen elvégezte a módosításokat, majd mikor megnézem a létrehozott dbConfig.inc.bak file-t akkor a kód írásaokr előszőr beolvasott sorok vannak benne... A bak file-t próbáltam törölni, de mikor létrehozta, ugyan az az eredmény...
2x?
Nem hiszem... Akkor a
1x
Kiírás?
Inkább nézd a webfejlesztő eszközök házózat fülét, vagy használd append módban (FILE_APPEND) a file_put_contents()-t.
2x
Sikerült!
Esetleg használsz cookie-t?
De tévedhetek...
Session-t használok, de
A $_REQUEST üressége helyett
$_REQUEST
üressége helyett én a$_SERVER['REQUEST_METHOD']
értékét vizsgálnám.Olyat tudok elképzelni, hogy valami rewrite szabály miatt befut például egy nem megadott, automatikus favicon kérés is a php-hoz, ha olyan a routing. Tehát először érkezik a form beküldése, utána pedig a böngésző lekéri a favicont, amiben nyilván nem lesznek paraméterek, így ez felülírja a fájlt az üres változattal.
Kipróbáltam ezt a módszert
Csak a biztonság kedvéért:
Saját, de virtuális gépen.
Csak annyiból volt (számomra)
Ezt hogy lehet kideríteni? Az
Hozzátartozik a dologhoz,
Azt is kb. CGI szkript jelleggel futtattam, ott még nem volt ilyen gond.
Kideríteni pl. úgy lehet, hogy belépsz a virtuális gépre és kiadsz egy "ps xa | grep fpm" parancsot, ahol jó eséllyel egynél több fpm processz fog megjelenni, ami _elvileg_ azt jelenti, hogy több szálon fut az egész.
Python+gunicorn alatt biztosan úgy működik ahogy írtam: a böngésző minden kérést másik szálnak küld, de PHP+FPM esetében nem tartom lehetetlennek, hogy eleve megtartja a böngésző és a szerver közti TCP kapcsolatot és akkor az elméletem egyből hülyeséggé válik.
Az eddigiek alapján nincs sok ötletem, a teljes kódot kellene látni működés közben, viszont ahogy említettem, ezer éve nem láttam PHP-t, szóval velem nem sokra mész.
AZért köszönöm! :)
De azért az érdekes, ha képernyőre iratom ki a változók tartalmát, akkor csak egyféle tartalom jelenik meg nem duplázódik meg, illetve maga a router kódnál, ahonnan ezt a kódot hívja meg, ott is csak egyszer hívódik meg.