Gå til innhold

Cannot modify header information problem


Anbefalte innlegg

Jeg har laget et helt simpelt download-teller script, men har støtt på ett problem. Scriptet er mysql basert og fungerer slik at brukeren trykker på en link kommer de til en side som lagrer infoen om den aktuelle filen i en database +brukerens ip. Når dette er gjort blir brukeren videresendt til selve filen og får laste ned. il å begynne funket det helt fint, men plutselig sluttet det å fungere. Aner ikke hva som har skjedd, men jeg har tydligvis gjort en forandring i koden uten å være oppmerksom på det og nå finner jeg ikke ut hva som er galt. Slik jeg ser det skrives det vel ikke ut noe info før header: location koden...eller?

 

 

Warning: Cannot modify header information - headers already sent by (output started at/download.php:1) in download.php on line 17

 

<?php
if(!empty($_GET['file'])){

include"config.php";

$fil = $_GET['file']; 
$DownloadDir = "files";
$arr = explode("/", $fil);
$kategori = $arr[0];
$filnavn = $arr[1];
$ip = $_SERVER['REMOTE_ADDR'];

$q = "INSERT INTO downloads (ip,filnavn,kategori) VALUES ('$ip','$filnavn','$kategori')";
mysql_query($q) or die("Could not connect:". mysql_error());

if(mysql_affected_rows() > 0){
header("Location: $DownloadDir/$fil");
}

}
elseif(!$_GET['file']){
echo"ingen fil definert.";
}
?>

Lenke til kommentar
Videoannonse
Annonse

sørg for at "<?php" er første tegn på første linje i fila. Noe (fks whitespace) blir sendt til browseren får du kjører header()

 

 

http://norskwebforum.no/viewtopic.php?p=58652#58652"[/url]']Hvorfor får jeg feilmeldingen "Warning: Cannot modify header information - headers already sent by..."?

 

Forklaring

Dette har noe med HTTP å gjøre. Et svar på en HTTP-spørring består av to deler, headere og innholdet. Headerene sendes før innholdet og kan ikke endres etter at de er sendt. Apache sender ut alle headerene med en gang det er noe "innhold" som skal sendes. Dersom man prøver å kjøre en funksjon som krever at headere skal sendes etter at man har sendt noe til nettleseren enten utenfor <?php ?> eller med echo/print etc. vil man få denne feilmeldingen. Funksjonene inkluderer: header() setcookie() session_start() HTTP::Redirect()

 

Løsning

Det som er mulig å gjøre er å lage en buffer med data man skal sende før man sender det ut i sendings-bufferen til Apache. Dette kan f.eks gjøres med PHPs ouput_buffering-funksjoner: http://www.php.net/manual/en/ref.outcontrol.php med eksempler på det her: http://jonepet.com/index.php?side=vis&id=160 . Men det beste er å prøve å ungå det.

Lenke til kommentar
det er ikke noe whitespace før header såvidt jeg kan se...andre forslag?

5434748[/snapback]

Prøvd en annen server? (Prøv f.eks. uniformserver på egen maskin)

Har PHP blitt oppgradert eller noe (kan være en eller annen feil i innstillingene som sender ut noe blankt ...)

 

Ellers vet jeg ikke.. Koden ser bra ut (for mine øyne)

Lenke til kommentar
fant ikke whitespace i configen nei...hm. Går det ikke an ¨printe ut hva som egentlig er i headern?

5435134[/snapback]

'Respone Headers' kan enkelt vises i Firefox gjennom en plugin som heter web-developer-toolbar (eller noe sånnt)

 

og ved å bruke 'Parox Proxy'

Lenke til kommentar

Dette var det jeg fikk ut av det:

 

 

Response Headers - http://www.knaillertan.com/inc/download.php?file=Lydklipp/Knaillertan%20-%20Englefjes.wma

Date: Fri, 13 Jan 2006 23:24:41 GMT
Server: Apache/1.3.33 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 PHP/4.3.11 FrontPage/5.0.2.2635 mod_ssl/2.8.22 OpenSSL/0.9.7a
X-Powered-By: PHP/4.3.11
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

200 OK

 

skjønte ikke mye av det, men kanskje noen andre gjør?

Lenke til kommentar

hva ska jeg se etter i databasen?

 

det virker når jeg bytter ut

 

if(mysql_affected_rows() > 0){
header("Location: $DownloadDir/$fil");
}

 

med

 

if(mysql_affected_rows() > 0){
echo"<a href=\"$DownloadDir/$fil\">$DownloadDir/$fil</a>";
}

 

Når jeg trykker på linken som da blir skrevet ut, begynner den å laste ned med en gang. Dvs at det ikke er noe i veien med koden som viser til hvor filen ligger i alle fall.

Endret av Tha_Zaynt
Lenke til kommentar

hmm...den qoutinga skjønte jeg fint lite av, men er det sånn at hvis php er konfigurert til å ikke kunne sende headere så kan jeg ikke gjøre noe med det?

 

 

EDIT:

 

Laget en index2.php med denne koden

 

<?php header("Location: http://www.knaillertan.com"); ?>

 

Det gikkk helt fint, så det kan ikke være at header modifisering er disablet.

Endret av Tha_Zaynt
Lenke til kommentar
hmm...den qoutinga skjønte jeg fint lite av, men er det sånn at hvis php er konfigurert til å ikke kunne sende headere så kan jeg ikke gjøre noe med det?

5435342[/snapback]

Bedre nå? Vet ikke hvorfor den havnet der...

 

Sjekk PHP.ini

 

Ev. prøv med ob_start(); ibegynnelsen

og ob_end_flush(); i slutten.

Lenke til kommentar

slik?

 

<?php
ob_start();

if(!empty($_GET['file'])){

include"config.php";

$fil = $_GET['file']; 
$DownloadDir = "files";
$arr = explode("/", $fil);
$kategori = $arr[0];
$filnavn = $arr[1];
$ip = $_SERVER['REMOTE_ADDR'];

$q = "INSERT INTO downloads (ip,filnavn,kategori) VALUES ('$ip','$filnavn','$kategori')";
mysql_query($q) or die("Could not connect:". mysql_error());

if(mysql_affected_rows() > 0){
echo"<a href=\"$DownloadDir/$fil\">$DownloadDir/$fil</a>";
}

}
elseif(!$_GET['file']){
echo"ingen fil definert.";
}
ob_end_flush();
?>

 

skjedde fint lite...bare linken som ble skrevet ut, ingenting annet

Endret av Tha_Zaynt
Lenke til kommentar

Tror jeg fant det ut...download.php var lagret i UTF-8 format. Tok bare og åpnet download.php i notepad lagre som.. med Koding: ANSI. Når jeg lastet opp fila funka det igjen.

 

Jaja... da har jeg lært noe nytt i dag og. Takker så mye for hjelpen.

Endret av Tha_Zaynt
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...