24. maj 2000 - 14:07Der er
11 kommentarer og 1 løsning
Afstemning med brug af en anden fil
Jeg har et script så man kan stemme på hvor god et link er. Men det virker kun nogle gange. Det hænder ret tit at når man reloader siden er pointene uændret. Hvorfor? Kan man reloade den for hurtigt, så den ikke når at opdateres på serveren? Selve filen med afstemningen er den lige herunder. Når man så stemmer henter den i en anden ramme den fil som er længere nede. En lidt besværlig metode - kan det gøres lettere?
$fp = fopen($texten, "w"); fputs($fp,$antalen); fclose($fp); ?> <HTML> <HEAD><META HTTP-EQUIV="Refresh" CONTENT="2;URL=stem.php3"></HEAD> <BODY> <? echo "Du stemte med: '".$point."' point.<BR>\n"; echo "Der er stemt: '".$antalen."' gange, og der er givet: '".$antal."' point ialt.<BR>\n"; ?> </BODY> </HTML>
Det virker i hvert tilfælde fint .. men det er sikkert nok i dit script hvis du flytter de tre linier (kunne bare ikke få div-tingen til at spille, derfor omrokeringerne).
lassehjorth >> Nej, desværre. Jeg bruger f2s.com, som har Postgres SQL. steffen >> Jeg tager og afprøver det. Jeg har nu svært ved at forstå at placeringen af de tre linier skulle betyde så meget.
skørsen: Problemet er, at browseren afbryder udførslen af scriptet, da den bliver redirectet med det samme.
Udførslen af filåbningerne mv tager trods alt en lille smule tid. - Så hvis dit php script lige venter med at stille browseren om til det selv er færdigt, skulle problemet kunne undgås.
lassehjorth: Jeg aner ikke hvordan man laver det i Postgres SQL. steffen: Metascripts bliver da først udført hos klienten. Php-script på serveren. Så vidt jeg har forstået udfører den hele phpscriptet før siden sendes til klienten. Jeg må desuden tilstå at jeg måske oprettede dette spørgsmål lidt hurtigt. I dag har scriptet fungeret nærmest upåklageligt i den oprindelige udgave.
Hvis der fx er tale om et databaseudtræk der tager mange minutter at lave - vil dit redirect betyde, at en browser fordet første aldrig ser scriptet - men også at scriptet bliver afbrudt, idét browseren nedlægger forbindelsen, og dette ses af serveren - i dette tilfælde php-serveren.
Prøv at sætte en wait sætning ind på en 30 sekunder el. lign., og se at det går galt :-)
Jeg er ikke med. Browseren kommer da uanset hvad aldrig til at se php-scriptet. Du svarer mig ikke direkte på hvorvidt den udfører hele phpscriptet inden den sender siden til klienten eller om den sender scriptet afsted efterhånden som serveren æder sig igennem scriptet. Men jeg formoder at du mener det sidste.
Output'et fra PHP scriptet bliver sendt lige præcis når det er lavet (med mindre du fiks-fakser med nogle buffer-indstillinger, men det er ikke standard).
Derfor .. i slow-motion:
Dit php-script går igang .. skipper de første tre linier som den sender uredigeret til browseren .. så går den i gang med arbejdet - åbner filen, læser indholdet, men how! nu kom der besked fra browseren at den er gået væk (blevet redirected) fra siden - så stopper udførslen af php-scriptet, og point'ene blev aldrig opdateret.
Derfor er det helt klart en bedre løsning at sende meta-tagsene som det allersidste, simpelthen.
steffen: Jeg har nu sat sleep(30) ind med et resultat der meget klart strider med dit udsagn. Og jeg har prøvet med forskellige "strategiske steder", alle med samme resultat. Hvis du vil overbevise mig må du lave et script der beviser dine udsagn.
<? echo "Udførslen stopper når man trykker stop<BR>\n"; echo "Tryk stop i din browser nu, eller vent 30 sekunder<BR>\n"; echo "Efter 30 sekunder, check da <a href='bevis.html'>filen</a><BR>\n";
flush(); for ($i=0;$i<5;$i=$i+1) { echo "<H1>Husk at trykke STOP</H1>\n"; flush(); sleep (5);
<a href='bevis.html'>Filen</a> er nu opdateret.<BR> </BODY> </HTML>
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.