Šta je novo?

PHP bug?

trancephorm

Čuven
Učlanjen(a)
16.05.2005
Poruke
159
Poena
620
Kada izvršite ovaj kod dole nećete dobiti nikakav izlaz, samo će se učitati varijabla iz fajla, inkrementirati za 1 i upisati u fajl. Naravno, ako nema fajla, on se kreira i to sve radi ok. Sada pokušajte da de-komentarišete poslednje dve linije koda. Kod mene se u tom slučaju događa da se nekim čudom varijabla ne inkrementira za 1 nego za 2 (kao da se dva puta pozvao ceo kod), što ja nikako ne mogu da objasnim. A vi?

Kod:
<?
$n = $_SERVER[DOCUMENT_ROOT].'/proba.txt';
if (file_exists($n)) {
    $f = fopen($n, 'r+');
}    
else {
    $f = fopen($n, 'x+');
    fwrite($f, '0');
    rewind($f);
}    
$d = fread($f,5);
$d++;
rewind($f);
fwrite($f, $d);
fclose($f); 
//header('Content-type: image/gif');
//readfile($_SERVER[DOCUMENT_ROOT].'/slika.gif');
?>
 
Dodavanje ova dva http hedera je resilo problem... mada mi i dalje nije jasno kako to kod moze da se izvrsi vise puta, ako heder nije podesen kako treba...

header('Content-length:
header('Expires:
 
Sa svim klijentima?
Npr. IE, Mozilla, Opera, Konqueror, Links (Lynx), Getright... ???

Moja je pretpostavka da client salje 2 http zahteva:
1. HEAD, da bi ispitao "svezost" materijala (Last-Modified, Expires...)
2. a tek onda GET, za dohvatanje sadrzaja (u tvom slucaju slike)
 
ako je tako, onda ne bi ni trebao da reaguje na head zahtev, tj. da ne izvršava kod jer nema prikazivanja sadržaja... probao sam samo firefox inače..
 
Metod koriscen za dohvatanje stranice (ili samo hedera) mozes da nadjes u $HTTP_SERVER_VARS['REQUEST_METHOD'].
PHP manual kaze sledece:
Note: PHP script is terminated after sending headers (it means after producing any output without output buffering) if the request method was HEAD.
Je li ti ovo celokupan kod skripta ili samo njegov deo?
 
Cudno...
Upravo sam probao slicnu stvar kod mene i ispostavilo se da firefox salje 2 skoro identicna GET zahteva. Jedina razlika je u "Accept" keyword-u:
- prvi put je
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
- a drugi put
Accept: image/png,*/*;q=0.5
Zasto???
IE6 i Opera 8.xx rade bez problema, salju jedan zahtev i samim tim inkrementiraju samo jednom $d.
Ako koristis Apache, a PHP je instaliran kao modul, koristi apache_request_headers() da dobijes asocijativni niz svih parova iz zahteva pa u zavisnosti od User-Agent i Accept vrednosti mozes uslovno da inkrementiras... Mada ne volim ovako neelegantna resenja, ovo je sve sto mi trenutno pada na pamet, ali cu definitvno jos da razmisljam o ovome...
 
hvala puno na ovakvoj eksperitizi, problem jeste zanimljiv, ali ja se nekako nisam toliko udubio u isti, ali mislim da bi mogli posle svega da konstatujemo da apache salje jos jedan get ako u prvom nije dobio heder kakav valjda ocekuje da bude. znaci sve radi kako treba, ali kada je heder onakav kakav firefox hoce.

jedan drugar je probao stvar u operi, kada se salje samo image/gif headerom, i radilo je kako treba... samo u firefoxu ne radi kako treba kada je tako..
 
Nazad
Vrh Dno