22. juli 2008 - 11:43Der er
26 kommentarer og 1 løsning
header forståelse
jeg fatter ik det med header, er der en der kan foklare det så selv jeg kan forstå det ?? kan måske være svært:) 1 header skal sendes før tekst 2 ved ny header kan man bruge ob_end_flush(); men kan ik lige se hvad og hvorfor ?? hvad sker der når man sender en header ? og er den tidsbestemt ? har header noget med databasen at gøre eller kun selve siden man går ind på ?? hvorfor kan jeg ikke flushe en header ?? alt om er jeg lidt træt af at få Warning: Cannot modify header information - headers already sent det sker ofte når man bruger nye moduler i php-fusion.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Headers fortæller bl.a. klienten hvordan klienten skal opfatte det resterende indhold af siden som er ved at blive loaded.
Det vil sige, at hvis man først angiver, at en side skal tolkes som f.eks. et PNG-billede, så kan man godt angive yderligere headers i form af størrelse, om billede skal vises eller klienten skal åbne en save-dialog-boks, eller noget i den dur. Man kan dog ikke sende billedet og så ændre headers til f.eks. et BMP-billede og så sende sådan et i samme omgang.
Derfor skal alle headers sendes først, inden der bliver sendt noget decideret indhold/kode.
ob_* bruges til at opsamle alt hvad der bliver sendt til klienten, således at man kan vente med at sende information til klienten og derved manipulere med dataene.
ja de forklare en del om header som også jeg har læst om her på eksp. men stadig popper de fejl op igen igen i forskellige sammenhæng eks pt har jeg denne fejl
gi denne fejl Warning: Cannot modify header information - headers already .. hvordan ser man hvad er sendt og hvad ik ? så har jeg prøvet med en header funktion som denne
<?PHP function php_end($header) { ob_end_flush(); if($header) header("location: $header"); mysql_close(); exit; } ?> for ligesom lukke men niks virker ik, igen hvad er sendt udaf header det kan jeg ik se tror det har noget med dette at gøre men er ik sikker
if (isset($page) && !preg_match("/^[_0-9a-z]+$/i", $page)) header("Location: ".BASEDIR.'index.php');
Prøv evt. at se, om der er sneget sig et mellemrum/linjeskift ind øverst i din kode.
Har du to PHP-filer: ------------------------------ <?php header("Location: blablabla"); ?> ------------------------------
og så denne hvor der er sneget sig et mellemrum ind alle først: ------------------------------ <?php header("Location: blablabla"); ?> ------------------------------
... så vil du netop få en "Warning: Cannot modify header information - headers already .." i sidstnævnte.
Hvis du ikke selv har 100% styr over dine headers og blot skal lave et automatisk hop til en ny URL, så kan du evt. lave det med java script: ------------------------------ <?php echo "blablabla..."<br/>; ?> <script type="text/javascript"> location.href="<?= FUSION_SELF."?page=search&type=".$_POST['type']."&query=".stripinput($_POST['query']); ?>"; </script> <?php echo "this will never be shown..."; ?> ------------------------------
Headers har intet med database at gøre, som du spørger om, men som du ikke har fået svar på. Headers er udelukkende noget information som bliver sendt til den browser du sidder med.
Hmm... Dette system har "fjernet" det mellemrum jeg satte ind i ovenstående eksempel... Det skulle se sådan ud (en _ angiver et mellemrum): ------------------------------ _<?php header("Location: blablabla"); ?> ------------------------------
hvis jeg nu kun bruger nedestående skulle det vel i princippet virke ik ? jeg får nemmelig ingen fejl, men der andet galdt da der kommer ingen søge resultat frem, så jeg tror vi stopper her da jeg først skal have fundet udaf hvorfor der ikke kommer nogen søge resultat frem. tak til alle tror jakobdo kom med noget der kunne bruges så hvis vi kan blive enige om det så lukker jeg efter svar $url = FUSION_SELF."?page=search&type=".$_POST['type']."&query=".stripinput($_POST['query']);
Du vil helt klart miste din header-warning, hvis du begynder at bruge javascript til at redirecte, frem for PHPs header(), men det hjælper desværre ikke så meget på din forståelse af håndteringen af headers.
Med andre ord, så omgår du dit problem frem for at finde "synderen" til dine warnings.
nej der har du ret jan, og jeg egenligt ligevidt des angående desvære, men jeg kan ik genneskue fejlen, så det er temmeligt umuligt for jer at gætte sig frem til hvor fejlen er. det som jakobdo kom med undgår jeg header som er lidt trals at arbejde med når man ikke kan gennemskue eller gætte mig til hvor den sender den header fra. men der ik andet ¨får jeg læsser om det ffra bunden en dag.
jep du har ret jakobdo men har en anelse om, ok er ikke sikker men fejlen ikke kun er header relateret, da det du skrev 22/07-2008 13:37:19 bruger jeg det med $URL... giver så ikke fejl, da den jo får en header anden sted fra, script delen giver fejl med ala.. endeløs $end ved ik lige hvad det er den mener, nok noget med den mangler en } klamme.
jan er lidt ked af det hvis du vil have point opretter jeg et nyt spørgsmål da det faktisk er dit script der virker og der ingen fejl i søge funktionen. ok som du selv siger så omgår jeg jo bare header fejlen.
Ja, det var måske billige point til jakobdo, men det vil jeg ikke hænge mig i. Jeg er her for at hjælpe, ikke for at score point ;).
Hvis du bare vil omgå problemet alle steder, så kan du evt. lave en lille hjælpefunktion: ------------------ function jsredirect($url) { echo "<script type='text/javascript'>\n"; echo "location.href='".addslashes($url)."';\n"; echo "</script>\n"; } ------------------
Så kalder du den i stedet for header og angiver udelukkende en url, f.eks.: ------------------ jsredirect("blog.php?page=types&type=e&id={$id}"); ------------------
Anyways... Har du mulighed for at sende den fil du har problemer med, eller er det integreret i PHP-fusion?
Eventuelt et link til en URL hvor jeg kan se det, så kan jeg i hvert fald se hvad der bliver sendt og som trigger dine warnings.
fint med den indstilling siten er http://esbnyt.dk og er modulet Blogs men kræver tilmelding for at se. problemet er en del af de moduler man kan finde rundt omkring kører med deres egne header som så giver et problem
Jeg er ked af at sige det, men jeg kan ikke forestille mig, at der er problemer i diverse moduler "rundt omkring". Måske taler vi lidt forbi hinanden eller jeg misforstår dig.
Der er absolut ikke noget i vejen med headers som sådan. Samtlige website sender dem afsted enten direkte eller indirekte (hvis man kan sige det). Hvad jeg mener er, at selv om du ikke angiver nogle headers på en hjemmeside, så bliver der stadig sendt nogen afsted.
Warnigen: "headers already sent" betyder ikke nødvendigvis, at DU har sendt nogle headers afsted. Det er mere fordi du har noget "indhold" afsted og inden indholdet bliver vist i en browser, så har browseren modtaget nogle headers behind-the-scene. Når du så efterfølgende prøver at lave en "header('Location: ..');", så får du warningen om, at der allerede er sent headers.
Kort og godt: Du må ikke have noget output i et script, INDEN der kommer et (eller flere) header('...')-kald. Dvs. ingen HTML-tags/tekst eller PHP-echo/print.
hehe hvorfor wee.. er du herfra ? vi er stort set enige i den fremlægning, det er jo bare sådan at selve hovedmodulet har sin egen header mange moduler har også deres egen header, og har prøvet en del moduler der har haft problemer, om det så er sammenkøringen, eller dem der har lavet dem som ikke kan finde udaf af det skal være usagt, derudover har der været en del jeg helt eller delvis skulle ændre i ligefra sql delen til simple tekst eller mindre programering men det er en anden sag, men primært header.
Det som lyder mærkeligt er, at de små moduler/add-ons/extension/tilføjelser også prøver at skrive til headeren, men det kan selvfølgelig bare være min manglende indsigt i php-fusion.
okay ser man det, verden er lille hehe, det kode jeg har skrevet tidlige er fra et modul og jeg ser ofte ved header brug at de sættes ind længere nede i koden, ok jeg er bestemt ikke ekspert i php men love at rode med det heheh ok altid bedst når jeg får det til at virke, men kanon at man har noget der hedder eksperten kan jeg kun igen og igen sige.
nej har prøvet at lege lidt med ob_start(); men syntes ik det har virket, og ja der må ik være nogen echo før header output, men der kommer så fejlen tror jeg at i en fil har man en echo som så er kædet sammmen med næste fil evt med include eller anden måde og så går det galdt
Synes godt om
Ny brugerNybegynder
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.