Autor Zpráva
MilanJ
Profil
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
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
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
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
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
Nejsem sběhlej v PHP, takže moc nechápu.:-/
Hugo
Profil
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
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&igrave;&ograve;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';

//// Ší&oslash;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&egrave;ku
$col_bor = '#F3F3F3';

//// Ší&oslash;ka ráme&egrave;ku
$wid_bor ='0px';

//// Styl ráme&egrave;ku
$sty_bor = 'solid';

//// 2 barvy pozadí v t&igrave;le
$col1 = '#F3F3F3';
$col2 = '#EFF0F8';

//// Text odkaz&ugrave;
$col_lnk ='#05379B';

//// Text deaktivovaných odkaz&ugrave;
$txt_td = '#333333';

//// Barva grafu
$gra_col = '#386FB2';

//// Barva procent
$pro_col = '#333333';




//// Zm&igrave;&ograve;te pouze budete-li mít více anket
$soubor = 'hlasy.txt';

//// Zm&igrave;&ograve;te pouze budete-li mít více anket
$jmeno_cookie = 'kolacek';
?>
Hugo
Profil
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
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
A co je na řádku 336 (tam je ta chyba)?
MilanJ
Profil
řádek 336 obsahuje:

setcookie($jmeno_cookie, '0', time()+$exp, '/');
Hugo
Profil
Tak někde před tím řádkem ti utíká nějaký výstup do prohlížeče. Musíš hledat.
error414-
Profil *
Tohle je snad legendarni chyba, nenasel jsem jinou chybu na kterou by se tak casto nekdo ptal.
Toto téma je uzamčeno. Odpověď nelze zaslat.