[ sojic @ 18.10.2006. 18:16 ] @
Radim "WEB administraciju mreže"

Evo kako izgleda fajl:

Code:

option domain-name "xxxx";
option domain-name-servers 217.16.68.xx, 217.16.69.xx;
option routers xx.xx.xx.xx;
dhcpd_run_chrooted="no";
ddns-update-style none;
default-lease-time 345600;
subnet xx.xx.xx.xx netmask 255.255.255.0 {
  default-lease-time 14400;
  max-lease-time 172800;
}

host user1
{
hardware ethernet 00:0d:9d:8b:e9:c6;
fixed-address xx.xx.xx.xx;
}
host user2
{
hardware ethernet 00:00:39:1f:61:8a;
fixed-address xx.xx.xx.xx;
}
host user3
{
hardware ethernet 00:0b:6a:52:7c:ac;
fixed-address xx.xx.xx.xx;
}


Kad ubacujem novog korisnika, nije problem. Pravim append:
Code:

    
    $record = "host user{$seriski['broj']} {\n";
    $record .= "hardware ethernet {$mac};\n";
    $record .= "fixed-address {$_POST['ip']};\n}\n";


$fajl = fopen("/etc/dhcpd.conf", "a+") {
fwrite($fajl, $record );
fclose($fajl);


Ali pitanje je kako da editiram (replace-iram) postojeći zapisi?
[ dzigorija @ 18.10.2006. 20:53 ] @
$fh = fopen('path/to/file', 'r+');

Ova opcija omogucava trazenje i pisanje po fajlu

onda koristis fseek za promenu mesta kursora u fajlu i ftell za trenutnu poziciju kursora

fseek ima i opcioni parametar koji je PHP konstanta i moze biti SEEK_SET (ovo je default), SEEK_CURRENT i SEEK_END (nisam siguran za seek_current ili seek_cur)

znaci:

fseek($fh,10); // postavlja kursor na 10 (prvi karakter je 0)
print ftell($fh)."\n"; //dobija se 10
fseek($fh,10,SET_CUR); // ili koja je vec konstanta
print ftell($fh)."\n"; // 20



sa seek_end moras offset da definises kao negativan integer, jer drugacije nema smisla,

a poziciju sa koje oces da pise i mrdas kursor odredi sa strpos ili ne znam cime...

nadam se da ovo vredi :)
[ Jbyn4e @ 19.10.2006. 08:11 ] @
Druga varijanta ti je da ucitas ceo fajl sa readfile (ili nekom drugom funkcijom, ne secam se sad kojom), izvrsis izmene nad stringom ili nizom koji si dobio i ponovo sve snimis u fajl...
[ dzigorija @ 19.10.2006. 10:01 ] @
Citat:
Jbyn4e: Druga varijanta ti je da ucitas ceo fajl sa readfile (ili nekom drugom funkcijom, ne secam se sad kojom), izvrsis izmene nad stringom ili nizom koji si dobio i ponovo sve snimis u fajl...


Mislim da je to bolja varijanta... ono sto sam ja pisao mnogo bre komplikovano :)

Ima samo jedna dobra fora koja se koristi kod promene konfiga bez opasnosti da ce neki klijent biti u nemogucnosti da procita fajl dok se nad njim vrse operacije

snimis fajl pod nekim temp imenom i onda ga preimenujes u tvoj dhcpd.conf

To sam cito od nekih eksperata, kazu da je to atomic operacije, sta god to bilo.. valjda nesto brzo :)
[ japan @ 19.10.2006. 11:08 ] @
Citat:
dzigorija: kazu da je to atomic operacije, sta god to bilo.. valjda nesto brzo :)


atomična (nedeljiva) operacija znači da će se ili izvršiti sve, ili ništa, tj. ako operacija ima npr. tri koraka, ne može da se desi da se dva koraka izvrše, a treći ne, nego će se izvršiti ili sva tri, ili neće nijedan.
[ sojic @ 19.10.2006. 11:38 ] @
OK, znači idemo ovako:

Podatke imam u bazi. Kad vršim izmenu, generišem novi fajl i replaciram stari dhcpd.conf.

Sad za sad baza je sa ne više od 256 korisnika, tako da mislim da neće biti problem.