Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cannot modify header information - headers already sent by...

[es] :: PHP :: PHP za početnike :: Cannot modify header information - headers already sent by...

[ Pregleda: 2448 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pisac

Član broj: 13046
Poruke: 4495



+3120 Profil

icon Cannot modify header information - headers already sent by...29.03.2016. u 21:31 - pre 47 meseci
Za redirekciju sa jedne na drugu stranu koristim header("location:$url");

Međutim, postoji problem. U donjem kodu, kada je slika prikazana (ukoliko je učitana u sesiju) onda dotična header redirekcija ne radi uz poruku u logovima: "Cannot modify header information - headers already sent by (output started at ..." i pokazuje upravo na liniju u kojoj je slika prikazana (<img height=50 src="data:image/jpeg;base64,<?php echo($_SESSION['pic'])?>">)

Code:

<form name="odjava" method="POST" action="_out.php">
    <table border="0" cellpadding="0" cellspacing="0" align="right" width="350">
        <tr>
            <td>
                <table border="0" cellpadding="0" cellspacing="0" align="right" width="350">
                    <tr>
                        <td align="right">
                            <font color="#0000FF">
                            <a href="edit_contact.php">
                                <b><big><?php echo("$_SESSION[email]")?></big></b>
                            </a>
                        </td>
                        <td align="right">
                            <small><?php echo($_SESSION['owner_id'])?>&nbsp;&nbsp;</small>
                        </td>
                    </tr>
                </table>
            </td>
<?php if($_SESSION['pic']){ ?>
            <td>
                <img height=50 src="data:image/jpeg;base64,<?php echo($_SESSION['pic'])?>">
            </td>
<?php }?>
        </tr>
    </table>
</form>


Mene zanima zašto je "headers already sent by" samo kada se prikaže slika, a ne i kada se prikazuju ostali podaci, i kako to rešiti?

Da dodam da sam zaobilazno to zakrpio sa <meta http-equiv='refresh' content='0; url=... ali bih voleo neko rešenje koje bi radilo i sa header("location... jer je takva redirekcija mnogo brža.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1912
*.allheartnews.com.

Sajt: stackoverflow.com/users/1..


+471 Profil

icon Re: Cannot modify header information - headers already sent by...29.03.2016. u 23:13 - pre 47 meseci
HTTP prvo šalje headere, pa onda body. Ako pošalješ u telu, podrazumevani headeri će automatski biti poslati. Tvoj header koji naknadno pošalješ ne bi bio protumačen kao header, već kao deo poruke (bukvalno bi dobio Location: gdegod u telu).

Gledajući tvoj kod, ne vidim ništa što bi ukazalo na grešku, verovatno je problem negde pre poziva `header` (koji mora biti pre bilo kakvog outputa). Možeš li da pokažeš taj deo koda, od početka, pa do header poziva?
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4495



+3120 Profil

icon Re: Cannot modify header information - headers already sent by...30.03.2016. u 00:04 - pre 47 meseci
Pa redirekciju pozivam sa mnogo mesta i sa mnogo strana. Svima njima je zajedničko to da prvo includujem stranu sa kodom koji sam dao (to je zaglavlje koje se pokazuje na svakoj strani, piše korisničko ime i slika, itd... malo sam skratio jer je duže), pa onda radim, računam i upoređujem nešto na trenutnoj php strani (ništa novo ne prikazujem) i ako je potrebno onda uradim redirekciju tako što pozovem funkciju

Code:

function redir($redir="")
{
    if($redir=="") $redir="index.php";
    header("location:$redir");
    echo("<html><body><meta http-equiv='refresh' content='0; url=".$redir."'><a href='".$redir."'>".$redir."</a></body></html>");
}


header je primarni način redirekcije, a ukoliko on ne odradi posao onda se aktivira http-equiv (a ukoliko i on ne odradi onda ostaje link). E fora je u tome što kada god je prikazana slika sa onog koda koji sam ranije naveo, onda header ne radi već se aktivira http-equiv, a kada nije prikazana slika onda header odradi posao sam.

Znači samo deo sa prikazom slike menja situaciju, odnosno kao da samo taj deo šalje neki heder.
Code:

<?php if($_SESSION['pic']){ ?>
            <td>
                <img height=50 src="data:image/jpeg;base64,<?php echo($_SESSION['pic'])?>">
            </td>
<?php }?>


Što me zbunjuje.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1058
82.208.210.*



+209 Profil

icon Re: Cannot modify header information - headers already sent by...30.03.2016. u 14:13 - pre 47 meseci
Uvek na kraju radis prikaz podataka a prvo ide ucitavanje i obrada.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4495



+3120 Profil

icon Re: Cannot modify header information - headers already sent by...30.03.2016. u 19:19 - pre 47 meseci
To bi moglo biti rešenje, ali moje čuđenje je zašto se tek slanjem slike pojavljuje "headers already sent by...", odnosno zašto sve radi ako se ne pošalje slika?
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1058
82.208.210.*



+209 Profil

icon Re: Cannot modify header information - headers already sent by...30.03.2016. u 19:46 - pre 47 meseci
Mozda jer slika je unutar html koda a ne poseban fajl i sa slikom se posalje neki header. Ne znam, nisam probao, samo pretpostavljam.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4495



+3120 Profil

icon Re: Cannot modify header information - headers already sent by...30.03.2016. u 22:29 - pre 47 meseci
Hm, da, rešio sam (za sada) problem tako što sam promenio način prikazivanja slike:

Code:

<img height=50 src="pic.php?id=<?php echo($_SESSION['id'])?>">


Sad je slika u sesiji višak pa ću je obrisati.
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Cannot modify header information - headers already sent by...

[ Pregleda: 2448 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.