Autor | Zpráva | ||
---|---|---|---|
MilanJ Profil |
#1 · Zasláno: 4. 1. 2006, 12:22:04
Na stránce se mi objevuje následující hláška:
Warning: Cannot modify header information - headers already sent by (output started at /www/doc/www.1hfkolomouc.cz/www/ankety.php:6) in /www/doc/www.1hfkolomouc.cz/www/ankety.php on line 336 Jak ji odstraním? ...nějak se mi nedaří an to přijít. |
||
simka00 Profil |
#2 · Zasláno: 4. 1. 2006, 12:26:00 · Upravil/a: simka00
to je jedna z nejčastějších chyb.. někde máš funkci header() nebo session_start() po nějakém obsahu.. (třeba řádek html nebo funkce echo)
zkus dát na začátku funkci ob_start() - ukládání do vyrovnávací paměti na konec souboru pak dej ob_flush() - to vypíše obsah souboru (ale musíš to povolit někde v php.ini) |
||
Hugo Profil |
#3 · Zasláno: 4. 1. 2006, 12:29:06 · Upravil/a: Hugo
Skript se pokouší odeslat HTTP hlavičku až po odeslání nějakého výstupu.
Řešení od simka00 není moc ideální. Lepší je zkontrolovat skript, a najít chybu. Může to být třeba mezera nebo prázdný řádek před <?php. |
||
MilanJ Profil |
#4 · Zasláno: 4. 1. 2006, 12:30:27
Nemám funkci header() nebo session_start().
Když spustím script na samostatné stránce, je to v pohodě a běhá to jak má, ale když to vložím do stránky, objeví se tahle chyba. :-/ |
||
simka00 Profil |
#5 · Zasláno: 4. 1. 2006, 12:32:45
Hugo
ze začátku jsem to dělal, jak říkáš ty, takže když jsem chtěl něco napsat, dal jsem $tisk .= 'neco'; jenže to pěkně zdržovalo, tak jsem to vyřešil vyrovnávací pamětí. |
||
MilanJ Profil |
#6 · Zasláno: 4. 1. 2006, 12:33:58
Nejsem sběhlej v PHP, takže moc nechápu.:-/
|
||
Hugo Profil |
#7 · Zasláno: 4. 1. 2006, 12:35:40
MilanJ
No, těžko říct co to může způsobovat. Možná tam máš nějakou funkci, která odesílá hlavičky. Bez skriptu je to jen hádání. simka00 Ono je někdy lepší investovat trochu času a napsat přehledný skript, který nebude trpět těmito problémy. Funkce pro řízení výstupu by se měli používat jen tam, kde je to nezbytné. |
||
MilanJ Profil |
#8 · Zasláno: 4. 1. 2006, 12:40:16
Script je následující:
<?php include('../config.inc'); if(isset($_GET['o'])) $o = $_GET['o']; $PHP_SELF = $_SERVER['PHP_SELF']; $exp = $min * 60; $odkaz = '0'; if(!isset($_COOKIE[$jmeno_cookie])) { if(isset($o)) { // chyba ve vyvolání $o = null; setcookie($jmeno_cookie, '1', time()+$exp, '/'); } else { // první vyvolání bez cookie $odkaz = '1'; setcookie($jmeno_cookie, '0', time()+$exp, '/'); } } else { // následující vyvolání s cookie if(isset($o)) { // hlas nalezen if($_COOKIE[$jmeno_cookie] == '0') { // zatím nehlasoval setcookie($jmeno_cookie, '1', time()+$exp, '/'); } else { // již hlasováno $o = null; } } else { // refresh $odkaz = '1'; } } if(!File_Exists ($soubor)) { $radek =''; for($i=1; $i<count($odp_arr); $i++) $radek .= '|'; $klika = fopen($soubor,'w'); if($klika == false) exit("<p>Nelze otevřít soubor $soubor k přepsání (1).<br>"); fputs($klika,$radek,strlen($radek)); fclose($klika); chmod($soubor,0644); reset ($odp_arr); } $klika = fopen($soubor, 'r'); if($klika == false) exit("<p>Nelze otevřít soubor $soubor ke čtení.<br>"); if(!feof ($klika)) $radek = fgets($klika, 4096); fclose ($klika); $cnt_arr = explode( '|', $radek); if(isset($o) && $o >=0 && $o <= count($odp_arr)) $cnt_arr[$o]++; $radek = implode("|", $cnt_arr); $klika = fopen($soubor, 'w'); if($klika == false) exit("<p>Nelze otevřít soubor $soubor k přepsání (2).<br>"); fputs($klika,$radek,strlen($radek)); fclose($klika); while(list($key,$val) = each($cnt_arr)) $celkem += $val; $procento = $celkem / 100; if($procento == 0) {$procento = 1;} $pct_arr = array(); reset($cnt_arr); while(list($key,$val) = each($cnt_arr)) $pct_arr[] = round($cnt_arr[$key] / $procento); $pixelu = 100; asort ($pct_arr); $pct_arr = array_reverse($pct_arr, true); reset ($pct_arr); reset ($cnt_arr); echo "<div style=\"width:$wid;overflow:auto\"><table style=\"border:$wid_bor $sty_bor $col_bor; font-size:$siz_fon; font-family:$fam_fon\" cellpadding=3 cellspacing=0><tr><th style=\"background-color:$bg_th;color:$txt_th\" colspan=2>$nadpis</th></tr>"; $ct = 0; $sw = 0; while(list($key,$val) = each($pct_arr)) { $hodn = $pct_arr["$key"]; $odpo = $odp_arr["$key"]; $ct++; if($ct == 1) $pomer = $hodn / $pixelu; if($pomer == 0) $pomer = 1; $delka = $hodn / $pomer; if($sw == 0) { $bg = $col1; $sw = 1; } else { $bg = $col2; $sw = 0; } echo "<tr><td style=\"background-color:$bg; color:$txt_td\">"; if($odkaz == '1') echo "<a style='text-decoration:none;color:$col_lnk' href=\"$PHP_SELF?o=$key\">$odpo</a>"; else echo "$odpo"; echo "<br><div style=\"width:$delka" . "px; margin-top:4px; font-size:0px; height:7px; background-color:$gra_col\"></div></td><td style=\"background-color:$bg; vertical-align: top; color:$pro_col\">$hodn %</td></tr>"; } echo "<tr><th style=\"background-color:$bg_th;color:$txt_th\" colspan=2>Celkem hlasů: $celkem"; echo "<br>$hlasZprava"; echo "</th></tr></table></div>"; ?> Soubor config.inc : <?php //// Zadejte nadpis ankety $nadpis = 'Líbí se Vám naše stránky?'; //// Toto nemìòte $odp_arr = array (); //// Nadefinujte otázky $odp_arr[] = "Ano, velmi"; $odp_arr[] = "Ano"; $odp_arr[] = "Ne"; //// Lhuta v minutách, po které lze znovu hlasovat $min = 60; //// Písmo $fam_fon = 'Verdana,Arial,Sans-Serif'; //// Velikost písma $siz_fon = '10px'; //// Šíøka ankety $wid = '200px'; //// Text záhlaví a zápatí $txt_th = '#333333'; //// Pozadí záhlaví a zápatí $bg_th = '#DEE1EF'; //// Barva rámeèku $col_bor = '#F3F3F3'; //// Šíøka rámeèku $wid_bor ='0px'; //// Styl rámeèku $sty_bor = 'solid'; //// 2 barvy pozadí v tìle $col1 = '#F3F3F3'; $col2 = '#EFF0F8'; //// Text odkazù $col_lnk ='#05379B'; //// Text deaktivovaných odkazù $txt_td = '#333333'; //// Barva grafu $gra_col = '#386FB2'; //// Barva procent $pro_col = '#333333'; //// Zmìòte pouze budete-li mít více anket $soubor = 'hlasy.txt'; //// Zmìòte pouze budete-li mít více anket $jmeno_cookie = 'kolacek'; ?> |
||
Hugo Profil |
#9 · Zasláno: 4. 1. 2006, 12:46:59
Problém bude asi v těch funkcích set_cookie(), před jejich použitím nesmí odejít žádný výstup do prohlížeče. Zkontroluj jestli v config.inc nejsou volné řádky před nebo za koncem php kódu.
|
||
MilanJ Profil |
#10 · Zasláno: 4. 1. 2006, 12:54:57
Problém bude asi v těch funkcích set_cookie(), před jejich použitím nesmí odejít žádný výstup do prohlížeče. Zkontroluj jestli v config.inc nejsou volné řádky před nebo za koncem php kódu.
Volné řádky tam nejsou. |
||
Hugo Profil |
#11 · Zasláno: 4. 1. 2006, 12:57:02
A co je na řádku 336 (tam je ta chyba)?
|
||
MilanJ Profil |
#12 · Zasláno: 4. 1. 2006, 12:58:10
řádek 336 obsahuje:
setcookie($jmeno_cookie, '0', time()+$exp, '/'); |
||
Hugo Profil |
#13 · Zasláno: 4. 1. 2006, 13:00:51
Tak někde před tím řádkem ti utíká nějaký výstup do prohlížeče. Musíš hledat.
|
||
error414- Profil * |
#14 · Zasláno: 4. 1. 2006, 14:22:44
Tohle je snad legendarni chyba, nenasel jsem jinou chybu na kterou by se tak casto nekdo ptal.
|
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0