21. december 2006 - 12:03Der er
12 kommentarer og 1 løsning
ob_start & ob_end_clean
Hej,
Jeg kiggede netop på disse to funktioner og efter at har været nød til at redirecte til en seperat side for at sætte cookies og sessions før virkede det som en løsning på det "problem". Men efter lidt læsning af tidligere tråde her på eksperten kan jeg se at det ikke er en metode som folk foretrækker, i hvert fald betragter folk det som "den lette vej" og istedet mener at man skal kode det ordentligt.
Derfor kunne jeg godt tænke mig at blive lidt klogere. Jeg har bygget min side op som mange andre, jeg har en index fil som inkludere alle sider alt efter hvad den får besked på - et kort overblik over den vil altså være noget i stil med:
include filer <head> </head> <body> include menu include $page </body>
Altså en meget "standard" opbygning, så vidt jeg ved. En af mine include filer i toppen er en fil som tjekker for session, om brugeren er logget ind eller ej - så allerede der bliver der sendt en header (hvis jeg da ikke har misforstået det hele). Hvordan skulle jeg ændre strukturen så det i $page ville være muligt at bruge en header? :)
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
det vil du under ingen omstændigheder kunne eftersom ethvert output til browseren vil resultere i den samme fejl, hvilket vil sige at <head></head><body>include menu som står over include $page vil lave samme fejl
Det kan som sagt være cookies og sessions der skal sættes - og redirects (som jeg hidtil har klaret vha. meta tags som også virker meget godt, det ville bare være lettere med en header).
Du skal bare strukturere din kode ordentligt - så kan du sætte alle de headers, du vil. Hvis du sørger for at holde din PHP- og HTML-kode adskilt, får du ingen fejl, når du sætter en header ... og så har den fremgangsmåde bunker af andre fordele ;o)
Output-buffering (brug af ob_start og ob_end_clean) performer rigtig skidt, da dokumentet jo gemmes i serverens hukommelse. Det bør du holde dig fra og i stedet skrive god kod =)
Jeg har ingen anelse om, hvad der foregår i dine filer, så derfor kan jeg heller ikke fortælle dig, hvordan de skal struktureres. Det eneste, jeg kan sige, er, at du skal ikke gøre, som du skitserer ovenfor - og heller ikke bruge output-buffering =)
Nej det er selvfølgelig rigtigt nok, jeg kan bare ikke se nogen måde at komme uden om det på lige umildbart - nok fordi jeg altid har lavet det som skrevet ovenover. Har du eventuelt link til en guide el.lign. som beskriver "god kode" eller kommer med hints dertil? :)
Mit problem er nok at jeg er lidt "låst" på idéen med at have diverse includes i toppen, en menu inkluderet og så en include alt efter hvad side brugeren nu skal se - som skrevet over. Jeg skal nok bare have en ledetråd eller sådan noget for at komme videre, men lige pt. er jeg altså ret tom for idéer mht. opbygning så jeg undgår "header already sent" uden brug af buffer.
Du skal blot sørge for, alle headers er sendt, inden du inkluderer dokumenter, der skriver noget ud til browseren. Du kan jo sagtens inkludere dokumenter, der indholder funktioner, som - når disse senere bliver kaldt - udskriver HTML :)
Ja, det tror jeg at jeg er med på - der er heller ikke noget i de includes jeg bruger i toppen af siden som udskriver noget, det er blot, som du siger, funktioner og variabler.
Mit problem kommer når jeg på den side der bliver inkluderet efter brugerens valg skal sætte en session eller lave en header med redirect f.eks. En måde at lave dette på kunne f.eks. være at gøre så disse sider der hentes efter brugerens valg hentes i toppen ligesom de andre includes og indholdet så bliver gemt i en PHP variable og udskrevet af index.php længere nede på siden - eller ville det ikke virke/være dumt? :)
Du må undskylde hvis jeg spørger for meget fremfor at prøve selv, men jeg vil (for en gangs skyld) gerne prøve at lave det ordentlig - så jeg vil gerne være sikker på at "idéen" er god før jeg bruger den. Der er jo mange ting som virker fint, men som ikke er specielt gode f.eks. pga. server belastning. :)
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.