Avatar billede superrex Nybegynder
30. marts 2004 - 09:21 Der er 5 kommentarer og
2 løsninger

Forskel på 2 servere (header information)

Hejsa

Jeg har en Apache version 1.03 og en Apache version 2.0048. Jeg har en samling filer kørende på version 1.03 og det virker perfekt men nu har jeg flytte alle filerne over på version 2.0048.

Efter flytningen får jeg denne fejl:
Warning: Cannot add header information - headers already sent by (output started at DATA:/htdocs/reg/voldsnr.php:13) in DATA:/htdocs/reg/voldsnr.php on line 69

På grund af denne linie: (on line 69)
header("Location:fejl.php");

Jeg kan dog bare bruge denne kode istedet, så virker det nogenlunde:
echo "<meta http-equiv=refresh content=0;URL=fejl.php>";

Er det en ændring i httpd.conf der skal til?
Avatar billede muddi Praktikant
30. marts 2004 - 09:38 #1
Hmm... hvorfor du først får vist fejlen nu, det kan jeg ikke svare på. Men årsagen til fejlen er, at du ikke må sende headers efter der er sendt output til browseren.
Der må faktisk ikke engang være en blank linie inden dit første php-åbnings-tag.

Dit første output sendes i linie 13, så hvis du vil bruge den anden header er du nødt til at flytte den op til den linie.

Årsagen til alt dette er, at headers modtages af browseren inden siden hentes. På den måde kan browseren se om det er dokument den vil modtage. Ligeså snart du så sender en blank linie eller andet output, så afbrydes afsendelsen af headers.

Du kan evt læse mere om funktionen ob_start() på http://dk.php.net/ob_start
ob står for "output buffering". Ved at bruge det, vil output først blive sendt når
- bufferen er fyldt
- du selv eksplicit vælger at sende det med ob_flush()
- scriptet er færdig med at afvikles
Avatar billede muddi Praktikant
30. marts 2004 - 09:39 #2
nb! der skal kun opfyldes ét af de ovennævnte kriterier ;)
Avatar billede razor Nybegynder
30. marts 2004 - 09:40 #3
Et HTTP svar er sat sammen af to ting. En header (en form for meta-data på protokol-niveau) og body (selve svaret - i de fleste tilfælde HTML).

Når først udsendingen af body er påbegyndt, kan du ikke lige pludselig komme i tanker om at du har glemt at sende en ekstra header. Derfor får du fejlen. Sørg for at strukturere din kode så du ikke udskriver noget af body (bare et enkelt lille blanktegn kan ødelægge det) før dine headers.

Du bliver endda gjort opmærksom på hvor du har påbegyndt udsendelsen af body henne:

  Output started at DATA:/htdocs/reg/voldsnr.php:13

Husk også at sende en fuldstændig URL med din "Location"-header. Det virker måske på den anden måde, men i specifikationen for HTTP står der klart angivet at du skal bruge den absolutte URL. Det er altså ikke sikkert at det virker i alle klienter, da man nu engang skriver klienter ud fra specifikationen. Den kan du i øvrigt finde her: http://rfc.sunsite.dk/rfc/rfc2616.html
Avatar billede superrex Nybegynder
30. marts 2004 - 09:59 #4
Jeg ved godt hvorfor fejlen kommer men jeg kan bare ikke forstå at den ikke kommer på den gamle version.

Jeg kigger lige på jeres svar.. vender tilbage om en time.
Avatar billede muddi Praktikant
30. marts 2004 - 10:23 #5
Jeg har også nogle scripts der kører på en Apache 1.3 hos Azero. Der kan jeg også sende headers efter at der er genereret output, men det kan ikke anbefales at gøre det, da det ofte er ris til egen røv når man ikke overholder specifikationerne ;)
Avatar billede superrex Nybegynder
30. marts 2004 - 12:39 #6
Jeg har fået det til at virke nu.. jeg ændrede lidt i rækkefølgen på koden.
Avatar billede muddi Praktikant
30. marts 2004 - 12:58 #7
fint :) tak for point!
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
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

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