Autor | Zpráva | ||
---|---|---|---|
Kos Profil * |
#1 · Zasláno: 31. 1. 2006, 13:56:33
$stranky = array('cau.html', 'nazdar.html', 'gutentag.html'); $pocet = count($stranky); $cislo = floor(file_get_contents('cislo.dat')); $cislo = ($cislo + 1) % $pocet; include $stranka[$cislo - 1]; fwrite(fopen('cislo.dat', 'w'), $cislo); Může se stát, že se občas záhadně nastaví nula při dvou současných přís tupech na stránku, viz http://php.vrana.cz/atomicita-operaci.php Co se tedy stane, když se v tomto případě záhadně nastaví 0? Vypíšeš se chybová hláška nebo se zobrazí CAU.HTML ??? Případně jak by se to dalo ošetřit. P.S.: Co znamená % v PHP ($cislo = ($cislo + 1) % $pocet; ) Díky za radu |
||
Kajman_ Profil * |
#2 · Zasláno: 31. 1. 2006, 16:45:58
% je modulo - zbytek po dělení
Takže když bude v souboru dvojka, pričte se jednička, bude zbytek nula. A když se ještě od nuly odečte pri include jednička, tak už je to záporná hodnota a těžko to v poli stranky najde. Myslím, že v tom kódu je chyba a má tam být např. include $stranka[$cislo]; |
||
mila Profil |
#3 · Zasláno: 31. 1. 2006, 18:15:02
A stane se něci hrozného pokud dva lidé po sobě uvidí stejnou stránku?
|
||
llook Profil |
#4 · Zasláno: 31. 1. 2006, 19:23:01
Když se záhadně nastaví nula, tak se zobrazí cau.html. To je celé.
Více to může vadit třeba u nějakých diskuzí, chatů apod. (v jedné knížce jsem viděl příklad na chat bez databáze, který to neměl ošetřené). Jde o to, že fopen('soubor', 'w') nejdřív smaže obsah souboru. Druhý návštěvník může spustit skript tak nešikovně právě v ten okamžik, že si soubor přečte když byl právě vyprázdněn (fopen) a ještě do něj nebyla uložena nová data (fwrite + fclose). A teď mě napadá, že mi v tom skriptu chybí fclose, takže poslední řádek bych spíš rozepsal takhle: $fp = fopen('cislo.dat', 'w'); |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0