Tak teď jsem se už ale fakt nasral. Už zase se mi smazala návštěvní kniha! Pár měsíců už to fungovalo, a měl jsem tam skoro 1000 příspěvků a všechno je v prdeli!
To se zde na fóru řešilo už mockrát, náhodně jsem našla
http://www.webzdarma.cz/forum/read.php?f=2&i=17100&t=17094.
Wz za to nemůže, toť k tvé poznámce, že se přestěhuješ na kgb, kterou máš v knize. IMHO ti přestěhování nepomůže...
No, já nevim. Právě že se to řešilo už jednou a bylo to tak, že v jednu dobu se to prostě spoustě lidí začalo mazat a pak to najednou přestalo. A byli tu i tací, kteří měli ten samej guestbook někde jinde a nic se jim nemazalo. Tak čím to je, když za to nemůže wz?
Na tom příspěvku, cos tady napsala bylo dopručený použít flock, což se taky ukázalo jako naprostá zbytečnost, která nefunguje.
Stává se to, když několik uživatelů otevře soubor kniha.dat (například) zároveň. Taky jsem měla podobnou návštěvní knihu staženou a taky se mi to stalo. Aby se to nemohlo stát, je třeba použít funkci flock.
>>pak to najednou přestalo
zřejmě knihu ošetřili pomocí flock...
Funkce flock: cituji z jednoho vlákna:
zamkne subor
ak by niekto do toho suboru pisal tak by sa tie data mohli prekryvat alebo pri najhorsom by sa subor zmazal atd.
proste pred zapisom to zamknes a ak niekto vola ten skript v tej istej chvili tak PHP pocka kym subor znovu odmoknes a potom bude pisat
No, možná se to předtím mazalo z jinýho důvodu, ale já (i někteří další) to zkusili a k ničemu to nebylo. Čučnu se, jesti jsem to tam nechal nebo jestli jsem to nakonec smazal...
No, tak to tam nemám. Už si ale, sakra, nepamatuju, jak se to psalo. No, nevadí. Nějak na to přijdu a zkusím to. Ale jestli to zase nebude tím, tak se fakt naštvu.
$save = fopen($file, "w");
flock($save, LOCK_EX); // uzamčení
fwrite($save, $neco);
flock($save, LOCK_UN); // odemčení
fclose($save);
http://cz.php.net/manual/en/function.flock.php
Aha... tak jsem se předtím špatně podíval, ten flock tam furt mám. Já se v php moc nevyznám, tenhle guestbook jsem stahoval z netu, ale takhle je to dobře, ne?
$fp = FOpen ("book.dat", "w"); //otevře book.dat pro přepis nebo vytvoření
Flock($fp, LOCK_EX);
FWrite ($fp, $write.$data); //zápis do souboru book.dat (nejprve aktuální příspěvek, poté přede?lý obsah souboru book.dat)
Flock ($fp, LOCK_UN);
FClose ($fp); //zavře soubor book.dat
Ale každopádně doporučuju občas si udělat zálohu souboru book.dat ;-)
Tak timpádem je to v prdeli. Tak to to asi přestěhuju, protože je stejně blbost, aby mi během měsíce odeslal někdo zprávu v tu stejnou chvíli třeba 6x (tak to bylo posledně)...
Jo, to mě taky trošku štve, poslední zálohu jsem dělal tak před měsícem, ne-li dřív. A zrovna včera jsem si říkal, že bych mohl zase... škoda;-(
ChrismasPoo - víš čím to je? Správci webzdarma se po nocích baví tím, že prochází účty uživatelů a mažou guestbooky. Takže opravdu běž jinam, tam se baví jinak.
(Pro pomalejší raději podotýkám že to myslím ironicky.)
>Tak čím to je, když za to nemůže wz?
Blbě napsaný skript :) IMHO je lepší použít MySQL
$fp = FOpen ("book.dat", "w"); //otevře book.dat pro přepis nebo vytvoření
FWrite ($fp, $write.$data); //zápis do souboru book.dat (nejprve aktuální příspěvek, poté přede�lý obsah souboru book.dat)
DYT SI TO MAZES SAM, TAK NEVIM, VO CO TI DE!
je to proste debilne napsanym skriptem!
napoveda k reseni problemu: otevirej soubor v rezimu append
a ten flock je takhle, jak to je napsany, uplne k nicemu
Toniku, já nevim, jestli si mysliš, že jsem blbej já nebo jestli jsi blbej ty, ale nechápu, jak můžeš napsat, že si ti mažu sám. To mi teda vysvětli, jaktože mi ta kniha několik měsíců fungovala, když si to furt mažu sám?! A jak mám teda napsat ten flock? Když tam dam režim append (jestli je to teda, že místo "w" dám "a", tak se mi to tam napíše a za to se mi zkopíruje celá kniha.
Jo, a ještě by mě zajímalo, jak bys mi vysvětlil, že mi to několik měsíců fungovalo, pak se mi to asi měsíc furt mazalo a pak mi to zas několik měsíců fungovalo? Já nejsem jedinej, komu se to stávalo a těm, co tu stejnou knihu měli i na jinejch stránkách a fungovala jim tam třeba i pár let se to prostě mazalo taky!
<FLAME>Ono kdyz je nekdo pomalejsi, tak je to tezky...</FLAME>
Pokud jsem dobre pochopil funkci toho guestbopoku, tak funguje zhruba takto:
1) nacte obsah souboru book.dat
2) v pameti k nemu pripoji novy prispevek
3) smaze stavajici book.dat (fopen s parametrem w smaze stavajici obsah)
4) zapise to, co ma v pameti
toto je vcelku pouzitelne, pokud se nestane nasledujici (a je uzivatel a a b je uzivatel b):
1. a projde az k 3), neboli je smazan stavajici obsah book.dat
2. b si nacte obsah book.dat (prazdny)
3. a ulozi do book.dat (obsahuje predchozi i pripsevek od a)
4. b ulozi do book.dat (obsahuje prazdnotu plus prispevek uzivatele b)
jde to resit nekolika zpusoby:
a) nejak zamknout book.dat(i proti cteni) na cas od smazani jeho obsahu, do konce jeho zapisovani, docela se osvedcuje napr. lock pres vytvoreni adresare (viz. nize)
b) pouzivat u fopen parametr "a", a nezapisovat celej obsah, ale jen novy prispevek, ma to tu nevyhodu, ze se posledni prispevek prida na konec souboru, ne na zacatek, takze pri vypisovani je potreba otocit poradi
c) pouzit mysql, nebo jinou databazy
lock pres adresare:
mkdir("nazevadresare") vytvori adresar a vrati true pokud to slo (neexistoval stejneho jmena) a false pokud to neslo (jiz existoval)
toto se da tedy pouzit na "semafor" pristupu k nejakemu zdroji dat (at uz je to soubor, ci cokoliv jineho). Princip je asi takovy:
kdyz chci pristupovat takovym zpusobem, ktery vylucuje pristup ostatnich (pridavani prispevku), zkusim mkdir("zamek"), pokud vrati false, chvili pockam a zkusim znovu, pokud true, mam vytvoreny zamek a mohu pracovat bezstarostne se zdrojem (souborem). Ve chvili, kdy prestatnu pracovat se zdrojem zavolam rmdir("zamek"), cimz smazu zamek. Tento pristup ma dve uskali:
a) pokud dojde k nejake havarii a nezavola se rmdir, tak nelze zapisovat dokud spravce manualne neodstrani zamkovy adresar
b) blokuje se soucasny zapis a cteni, ale tomu se clovek nevyhne, pokud nepouzije mysql a podobne.
>> Toniku, já nevim, jestli si mysliš, že jsem blbej já nebo jestli jsi blbej ty, ale
>> nechápu, jak můžeš napsat, že si ti mažu sám. To mi teda vysvětli, jaktože
>> mi ta kniha několik měsíců fungovala, když si to furt mažu sám?!
Doufám že příspěvek Gluba ti stačil jako vysvětlení co bylo myšleno tím, že si to mažeš sám.
<offtopic> tome ty stranky boure.wz.cz si delal fak ty? </offtopic>
Ne, skutečně stránky boure wz nejsou moje.
Pomáhal jsem jednomu týpkovi instalovat opensource e-shop tak mi dal přihlašovací údaje a dívám se že jsem se zapomněl odhlásit :-)
Moje jediné stránky jsou www.vsbcs.wz.cz.
"pokud dojde k nejake havarii a nezavola se rmdir, tak nelze zapisovat dokud spravce manualne neodstrani zamkovy adresar"
staci tam jeste hodit nejakou podminku na stari adresare (5 vterin by mohlo stacit)
Tak jo, no. Sorry, Toniku, byl jsem nasranej, že se mi to smázlo a žes mi psal, jak kdybych byl blbej. Já jsem tam psal, že phpčku moc nerozumim. A to, že se to v jednu dobu mazalo víc lidem je prostě fakt, byly tady o tom diskuse. Nevíte někdo, kde by se dala stáhnout dobře fungující návštěvní kniha?