13. november 2008 - 18:25Der er
83 kommentarer og 1 løsning
Årets mærkeligste PHP opførsel
Det er med at finde på en titel som fanger, når man virkelig har brug for så mange eksperter der læser indlægget som muligt. :)
Følgende fil.php parses to gange. Læs korrekt: filen parses af PHP to gange efter hinanden. Der indsættes nemlig TO rækker i tabellen hver gang siden loades een gang.
fil.php
<body background="#CCCCCC"> <? mysql_connect("localhost","udvikling","adgangskode") or die("Kan ikke forbinde til mysqlserver"); mysql_select_db("udvikling"); session_start(); mysql_query("INSERT INTO tider (url,tid,brugerid) VALUES ('$_SERVER[REQUEST_URI]',NOW(),'$_SESSION[sess_userid]') ")or die(mysql_error()); ?>
Følgende fil parses EEN gang. Der indsættes een række i tabellen hver gang siden loades.
fil2.php
<body > <? mysql_connect("localhost","udvikling","adgangskode") or die("Kan ikke forbinde til mysqlserver"); mysql_select_db("udvikling"); session_start(); mysql_query("INSERT INTO tider (url,tid,brugerid) VALUES ('$_SERVER[REQUEST_URI]',NOW(),'$_SESSION[sess_userid]') ")or die(mysql_error()); ?>
Som I kan se er den eneste forskel attributten background="#CCCCCC" !
Kan nogen ekspert fortælle mig hvor i hele hulen fanden i skuret, at lortet opfører sig sådan?
At tilføje: Det er nok kun at fjerne havelågen # for at få den til kun at parse een gang.
Serveren: FreeBSD domain.dk 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 10:40:27 UTC 2007 root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
PHP Version 5.2.3 - PHP API 20041225 - PHP Extension 20060613 Mysql 4.1.22
Ja nemlig. Jeg er glad for at du studser over det lige så meget som jeg. Og jeg har prøvet at bytte om så session_start() kommer som det første. Det gør ingen foreskel.
Jeg må hellere også lige fortælle at oprindeligt var session_start() i toppen. Derudover: problemet er ikke kun i denne fil. Problemet går igen i et større manager system.
Jeg ved godt det lyder fuldstændig vanvittigt. Og du kan tro jeg har overvejet mange gange om jeg overhovedet skulle poste dette spørgsmål, af fare for at latterliggøre mig selv. Men læs her: Jeg opdagede problemet for over 1 år siden og jeg har skruplet over det siden. Og det er lige før jeg vil poste login til server for at bevise at det er rigtigt hvad jeg siger :)
Det har intet med PHP at gøre. Men når du ikke afleverer et lovligt HTML-dokument til en browser, kan du ikke regne med hvad browseren gør. Den kan hente det 2 gange. Såmænd.
Ok, jeg må hellere, af hensyn til olebole, og andre fluekneppere, præcisere: Det handler ikke om et "lovligt" HTML-dokument, men om man får skrevet det man mener, eller mener det man skriver.
Normalt vil jeg ikke, men html.dk har en fin oversigt over alle tags og attributter.
Ehm. Du burde have set det før .... Måske har du brugt bgcolor, som du "mente". Eller også har IE (måske, bruger den ikke), cached fil.php, for den ændrer sig ikke pga et "anchor"
Kan ses på http://n0p.com/852722.php i ovennævnte form. Lad os høre hvad forskellige browsere gør: tæller op med een eller 2. Prøv at opdatere et par gange.
"Hvorfor gør den det så her?" - browseren kunne cache siden, men gør det så ikke. Måske, principielt, en slags fejl. Men måske cacher de afhængig af type, og her forventes et billede. Nej, jeg ved det ikke.
Erik så har jeg et tillægsspørgsmål: Kan dette problem være årsag til at sitet "hænger" sporadisk? Ved godt at det er et udefineret problemformulering. Men det er fejlfindingen på at sitet sporadisk hænger, der har ført til dette problem med body tagget.
Ja, browseren hænger tilsynelande når den henter noget, den ikke kan tolke som et billede. Igen ikke noget med dit site, som sådan - (uforklarlig) browseropførsel.
Erik jeg kan se i dit eksempel 19:48:05 at du bruger session_start(). Er det for at sikre at session fungerer hvis man ikke har version 4.1.0 eller derover? eller mener du man bør bruge session_start() hele siden?
Man behøver ikke sige session_start i toppen af PHP-scripts på en server, hvor PHP er indstillet til at gøre det automatisk. Men det er selvfølgelig en go' ting, hvis man vil holde sine scripts flytbare.
Altså på min server er autostart sat til OFF. Men jeg har faktisk lige fjernet session_start() fra alle mine sider og session fungerer stadig? jeg kalder alle session variabler fra superglobal $_SESSION
De sessions, der er, vil blive der, men der skulle ikke kunne komme nye. Men har du rettet det rette sted. Check det med en .php fil med: <?php phpinfo(); ?>
session_start() bliver overhovedet ikke kaldt mere. Og selvom jeg lukker browseren og åbner en ny browser og logger ind, så fungerer session upåklageligt. Men det bør det ikke?
i phpinfo står der session.auto_start Off Off
Jeg havde session_start() i en include hvor der også blev skabt forbindelse til mysql. Jeg fjernede session_start() fra den include.
altså kender i det der, når der er noget som burde være vildt logisk, pludseligt bliver ubegribeligt. Men jeg tror jeg har fundet ud af det nu :) skal vi ikke lade den ligge her.
1) Du får afsluttet spørgsmålet på en eller anden måde. Jeg samler ikke på point. 2) Du ved lejlighed lige ultrakort siger om dit "store problem" så blev løst - jeg er bare lidt nysgerrig. Og jeg siger det ikke til nogen!
Indtil videre har der ikke været en skygge af "det store problem". Systemet har ikke hængt en eneste gang siden. Jeg giver besked igen når der er gået længere tid.
Fik lige lyst til at genlæse en af mine bedste eksperten.dk oplevelser :)
Jeg kan informere om at systemet har ikke hængt siden erik løste dette problem. Så det kunne da godt ske at gaven skulle have været fransk i stedet for? :)
Det er god underholdningsværdi. Var den ikke fransk? Længe siden...
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.