Avatar billede Slettet bruger
16. oktober 2003 - 21:28 Der er 11 kommentarer og
1 løsning

Header fejl!

Jeg har et mail script, og det fungerer helt fint. Der er bare ét problem, noget med en header fejl. Se scriptet her: www.ssjpride.dk/?id=kontakt.htm når du så sender en mail, kommer den med følgende fejl på min "takke" side:
Warning: Cannot add header information - headers already sent by (output started at /customers/ssjpride.dk/ssjpride.dk/httpd.www/thanks.php:8) in /customers/ssjpride.dk/ssjpride.dk/httpd.www/thanks.php on line 34

her er linie 34: setcookie("sentemail","$num",time()+86400);

Hvad kan jeg gøre for at fjerne fejlen?
Avatar billede googolplex Novice
16. oktober 2003 - 21:38 #1
I starten af din side:

ob_start();

I slutningen:

ob_end_flush();

Så slipper du for den slags fejl :)
Avatar billede Slettet bruger
16. oktober 2003 - 21:39 #2
Det har jeg prøvet!
Avatar billede tipsen Nybegynder
16. oktober 2003 - 21:45 #3
Du kan sørge for ikke at sende output til browseren inden du bruger setcookie()
Avatar billede Slettet bruger
16. oktober 2003 - 22:02 #4
Jeg har fundet svaret. Jeg havde lavet en fejl med det der ob_start(); som jeg prøvede før også. Jeg tror jeg placerede i den forkerte fil. Nå, men dte virker i hvert fald nu
Avatar billede tipsen Nybegynder
16. oktober 2003 - 22:37 #5
Det er sjældent man har brug for output buffering (Du skyder gråspurve med kanoner) - oftest er det blot en ordentlig organisering af koden der er tiltrængt.
Avatar billede fangel Nybegynder
16. oktober 2003 - 22:55 #6
hovedregel:

altid have header() (gælder også cookie(), session_start + flere, da disse sender en header) før ALT output! sådan et HTTP protokollen struktureret og sådan virker det!

man kan overkomme problemet på 3 måder (sorteret efter 'bedst preformance')

1) gemme alt output i en variabel, og så tilføje til denne i stedet for at bruge echo ($var .= tilføjer)
hvis der kommer header() kald er der jo intet sendt endnu...
I bunden af siden udskriver du så bare din variabel

2) strukturer dit script så alle ting der kræver kald til header() ligger over alt der kan generere et output!

3) brug output-buffering! dette er normalt at gå over stringen, men kan være brugbart fx i samarbejdre med error-handling...

tipsen -> har jeg ikke ret i at brug af en $output variabel er hurtigere en mange kald til echo - synes jeg engang vi lavede nogle tests på (i forbindelse med tabel generering)

Morten
Avatar billede tipsen Nybegynder
16. oktober 2003 - 23:54 #7
dea: Det er korrekt at det kan spare meget tid at minimere antallet af echo kald.
Avatar billede googolplex Novice
17. oktober 2003 - 10:00 #8
Vil det sige, at man aldrig bør bruge 'echo', men i stedet $output.= 'Noget meget output'; og så udskrive $output til sidst ? Hvor meget sparer man på det ?
Avatar billede fangel Nybegynder
17. oktober 2003 - 10:03 #9
googolplex -> hmm, ved det faktisk ikke, men jeg kan godt prøve at lave lidt tidstagning på det... hvis du virkeligt vil vide det ;)

Morten
Avatar billede tipsen Nybegynder
17. oktober 2003 - 10:08 #10
Nogle af de steder du kan spare virkelig meget er i strukturer der minder om:

for (...) {
  echo ...
}

-altså løkke-strukturer med mange gentagne kald til echo!

I stedet kan følgende anvendes:

$tmptxt = '';
for (...) {
  $tmptxt .= ...
}
echo $tmptxt;

-man samler altså alt teksten i variablen $tmptxt og udskriver den til sidst.
Avatar billede googolplex Novice
17. oktober 2003 - 10:22 #11
dea_pg:

Ja, gider du :P

Nej, så vigtigt er det ikke ;)

tipsen:

Jeg bruger altid metoden til løkker, der er den jo åbenlys, men regnede ikke med at det kunne betale sig generelt :)
Avatar billede Slettet bruger
08. maj 2004 - 03:27 #12
Lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester