Tha_Zaynt Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 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
nercix Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 (endret) Merkelig. Kan ikke se at noe er galt... Men man bruker vel helst: if(isset($var)) isteden for if(!empty($var)) Sjekk for ev. whitespace i php-fila Endret 13. januar 2006 av Vid^r Lenke til kommentar
dabear Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 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
Tha_Zaynt Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 det er ikke noe whitespace før header såvidt jeg kan se...andre forslag? Lenke til kommentar
nercix Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 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
Tha_Zaynt Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 fant ikke whitespace i configen nei...hm. Går det ikke an ¨printe ut hva som egentlig er i headern? Lenke til kommentar
nercix Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 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
Tha_Zaynt Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 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
nercix Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 Ta å sjekk mysql databasen din. PHP scriptet ditt sier ikke noe spessielt hvis filen ikke finnes btw. Lenke til kommentar
Tha_Zaynt Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 (endret) 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 13. januar 2006 av Tha_Zaynt Lenke til kommentar
nercix Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 (endret) Jepp, noe blir sendt en eller annen plass i prossesen. Kanskje PHP konfigurasjonen er endret slik at du ikke kan sende headere. NÅ SA DET STOPP MED MEG. Endret 14. januar 2006 av Vid^r Lenke til kommentar
Tha_Zaynt Skrevet 14. januar 2006 Forfatter Del Skrevet 14. januar 2006 (endret) 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 14. januar 2006 av Tha_Zaynt Lenke til kommentar
nercix Skrevet 14. januar 2006 Del Skrevet 14. januar 2006 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
Tha_Zaynt Skrevet 14. januar 2006 Forfatter Del Skrevet 14. januar 2006 (endret) 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 14. januar 2006 av Tha_Zaynt Lenke til kommentar
nercix Skrevet 14. januar 2006 Del Skrevet 14. januar 2006 Det var det jeg tenkte. Lenke til kommentar
Tha_Zaynt Skrevet 14. januar 2006 Forfatter Del Skrevet 14. januar 2006 (endret) 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 14. januar 2006 av Tha_Zaynt Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå