mujweb.cz/images/logo-verze1.png
mujweb.cz/images/logo-verze2.png
mujweb.cz/images/stranka-verze1.php
mujweb.cz/images/stranka-verze2.php
mujweb.cz/images/stranka.php?verze=1
mujweb.cz/images/stranka.php?verze=2
mujweb.cz/images/obrazek.php?jmeno=logo.png&verze=1
Mozna by bylo lepsi, kdybys rekl, k cemu to potrebujes, co tim chces docilit.
K obrazku otaznik dat muzes, ale nemas defaultne nastaveny server, aby to umel zpracovat a tak vse za otaznikem ignoruje. Toto nastaveni mas jen pro koncovku htm, php. V htm to jde precist javascriptem pres window.location nebo location. V php to je $_REQUEST, $_POST, $_GET.
Pokud bys to nutne chtel mit presne tak, jak to pises, tak by se to resilo dodatecnym nastavenim serveru v souborech php.ini, httpd nebo .htaccess. Nastavis tam, ze pokud je pripona png a je tam ?, tak to ma presmerovat na soubor obrazek.php a predat mu pres otaznik parametry jmeno a verze. V php uz to zpracujes a vratis obrazek nebo link na nej. Ale nedoporucuji to takto delat. Soubor pak zatezuje server misto toho aby se to pekne kesovalo, kdyz se vklada primy link.
Příspěvky odeslané z IP adresy 2001:718:2601:1f7:bcfb:c6...–
Zkus si nasimulovat opacnou situaci. Mas chat s mnoha uzivateli online. Co se stane, kdyz tam locky nedas?
Zapis do souboru nejakou dobu trva. Php preda funkci zapis parametry a dal si dela svoje. Pokud dva uzivatele pres php provedou fwrite a ten druhy se trefi zrovna do okamziku, kdy ten jeden jeste neudelal fclose. Php mu to dovoli a cele se to znici, nuluje velikost souboru. Pro takovy pripad se vymysleli flock, ktery druhemu uzivateli blokuje pristup ke zmene obsahu, kdyz s nim pracuje jiny uzivatel. Pred db jsem pouzival tento kod
function writeFile($file_name,$data_to_save,$end_time,$type='w')
{
global $ERRORS;
$fp = fopen($file_name,$type);
if ($fp)
{
$start_time = microtime();
do {
$can_write = flock($fp, LOCK_EX);
if (!$can_write)
{usleep(round(rand(0,100)*1000));}
}
while ((!$can_write) and ((microtime() - $start_time) < $end_time));
if ($can_write)
{fputs($fp,$data_to_save);}
else {$ERRORS[] = 'writeFile: file write error!'; return false;}
@chmod($file_name,0755); //!nastavit prava k zapisu souboru, 755 (rwx r.x r.x) nebo 644 (rw. r.. r..) (owner-vlastnik, group-skupina, other-ostatni, r-read, w-write, x-execute; umask, mkdir)
fclose($fp);
}
else {$ERRORS[] = 'writeFile: file open error!'; return false;}
return true;
}
U db muze nastat neco podobneho. Tam jsou zamky take. Ale u db se vykonavaji prikazy postupne a ne najednou, jak to umoznuje server/php. Samozrejme, kdy dva lide edituji jeden zaznam, tak se prepise udaji, ktere poslal posleni z nich. Ale nezkolabuje kvuli tomu soubor s databazi, jak se to stane u fwrite bez flocku.