Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Cannot modify header information...
Forum PHP.pl > Forum > Przedszkole
proton
  1. Warning: Cannot modify header information - headers already sent in /srv/www/vhosts/netfrag.netarteria.eu/httpdocs/maincore.php on line 248


Taki otóż mam błąd jak dodam np. news, artykuł.

Kod z maincore.php:

  1. <?php
  2. // Redirect browser using the header function
  3. function redirect($location, $type="header") {
  4. if ($type == "header") {
  5. header("Location: ".$location);
  6. } else {
  7. echo "<script type='text/javascript'>document.location.href='".$location."'</script>n";
  8. }
  9. }
  10. ?>


Linia 248 to ta: header("Location: ".$location);

Co może być nie tak?

Linijka która zapewne powoduje błąd w pliku od dodawania newsów to:

  1. <?php
  2. if (!checkrights("N") || !defined("iAUTH") || $aid != iAUTH) fallback("../index.php");
  3. ?>


Zaś zawartość index.php to:

  1. <?php
  2. if ($_COOKIE['zmienna'] == 'stary') {
  3. include "news_stary.php";
  4. } else {
  5. include "news_nowy.php";
  6. }
  7. ?>


Próbowałem nadpisywać pliki oryginalnymi (bo to cms zmodyfikowany), dodawać ob_start(); i ob_end_flush(); ale nie pomogło.
pawel81
Nagłówek został już wysłany.
Funkcji header nie możesz poprzedzić kodem html.
http://php.net.pl/manual/pl/function.header.php

poczytaj jeszcze o funkcjach ob_ http://php.net.pl/manual/pl/function.ob-start.php
proton
Ale to nie jest poprzedzone html'em
pawel81
a includowane pliki?
proton
Nie możliwe aby to była winaincludowanych plików, bo nadgrałem oryginalne pliki wszystkie ktore są z tym związane i nadal nic.

Może to być wina konfiguracji serwera?

Sprawdzam dokładniej plik odpowiedzialny za wysyłanie newsa i tam mam linijke:

  1. <?php
  2. redirect(FUSION_SELF.$aidlink."&status=sn");
  3. ?>


Może to kogoś naprowadzi

redirect zamiast przekierowywać na FUSION_SELF.$aidlink."&status=sn przekierowywuje na FUSION_SELF.$aidlink."
strife
Cytat(proton @ 9.07.2007, 13:33:04 ) *
Nie możliwe aby to była winaincludowanych plików, bo nadgrałem oryginalne pliki wszystkie ktore są z tym związane i nadal nic.

Może to być wina konfiguracji serwera?


Hmm .. w takim razie jedna myśl mi przychodzi do głowy. Edytor jakim zapisujesz pliki może dodawać na początku jakieś znaki od siebie ( BOM ).

http://forum.php.pl/index.php?showtopic=27476

Warto sprawdzić i zobaczyć innym edytorem.
pawel81
ja tez maiłem raz problem z edytorem kod w pliku był zapisany a strony nie wyświetliło zobacz w tym edytorze http://www.mpsoftware.dk/downloads.php

szukałem tej funkcji redirect w manualu i leksykonie ale nie znalazłem była owszem http_redirect http://php.net.pl/manual-lookup.php?patter...ect&lang=pl
proton
Nie wiem czy dobrze sie wyrażam ale chyba zrozumiecie, otóż funkcja redirect jest opisana w pliku maincore.php:

  1. <?php
  2. function redirect($location, $type="header") {
  3. if ($type == "header") {
  4. header("Location: ".$location);
  5. } else {
  6. echo "<script type='text/javascript'>document.location.href='".$location."'</script>n";
  7. }
  8. }
  9. ?>
pawel81
Zobacz na ta funkcje http://php.net.pl/manual/pl/function.headers-list.php

Sprawdź zawartość nagłówka

Dodaj przed
  1. <?php
  2. header("Location: ".$location);
  3. ?>
  1. <?php
  2. echo'jakiś tekst';
  3. ?>
i zobacz w którym miejscu strony wyświetli ten tekst najlepiej w źródle czy przed znacznikiem html
proton
Normlanie tekst sie nie wyświetla, pojawił się dopiero jak wysłałem news i znajdował się nad błędem
pawel81
zablokuj linie header znakiem # pod header daj exit; i zobacz teraz w źródło

  1. <?php
  2. #header("Location: ".$location);
  3.  
  4. echo 'text';
  5. ?>

albo nie dawaj tekstu

  1. <?php
  2. #header("Location: ".$location);
  3.  
  4. ?>


jeżeli źródło jest czyste to znaczy że nagłówek nie został wysłany wcześniej
proton
Pomogło to w tym iz nie wywala już błedu, lecz teraz nie przekierowywuje adres.php?status=sn ale bez tego da się żyć bo tam był tylko tekst że news dodany a teraz ten tekst moge dodać nad header i wtedy będzie on widziany.

dzięki za pomoc
pawel81
daj przed header @ i nie wywali błędu
proton
ale ze znakiem # też już nie wywala błedu więc jest ok

jedyne co jest złe to to że nie przekierowywuje
pawel81
  1. <?php
  2. #header("Location: ".$location);
  3.  
  4. ?>


jeżeli źródło strony jest czyste to znaczy że nagłówek nie został wysłany wcześniej
Cosi*
A może sprawdź, czy w includowanym pliku po zakończeniu kodu "?>" nie ma wstawionej nowej linii? Jeżeli tak, spróbuj usunąć.
Nie wiem czy pomoże, ale kto wie...? smile.gif
pawel81
A przed <?php w aktualnym liku
Cosi*
Przed znakiem, po znaku... Chodzi o to, żeby poza obszarem <?php ?> nie było żadnych znaków nowego wiersza.
proton
Nie ma nic, wszystko ujęte jest pomiędzy <?php ?>
Cosi*
A jak oglądasz plik w edytorze i przesuniesz się na koniec dokumentu to po "?>" masz pustą linię?
Jeżeli nie, to nie mam pojęcia.....
proton
Nie ma nigdzie pustych linii... Na dodatek przedstawie wm jeszcze jeden fakt otóż funkcja redirect służy także w logowaniu bo gdy sie loguje to wtedy mnie przekierowywuje na ostatnio ogladana strone i tam podczas logowania działa to ok :/ (teraz już nie działa ale zrobie to tak że do logowania nadal bedzie sluzyc redirect a do newsow, artykułów będzie redirect2 czyli ta z #)

EDIT:

Troszkę ten kod zedytowałem i teraz zamiast używać funkcji header to kod korzysta z JS:

Kod
<script type='text/javascript'>location.href='".$location."'</script>



Czy może tak być?
tommy4
Może, ale to bez sensu.

Człowieku, znak # to komentarz, chodziło o to, abyś przed wysłaniem nagłówka sprawdził, czy masz coś wypisane w źródle. Jeśli masz, tzn. że gdziesz masz echo bądź znaki poza <?php ?>. Jeśli nie, to wszystko jest w porządku.

W ostateczności użyj funkcji:

ob_start(); <- na samym początku generowania strony

ob_end_flush(); <- na samym końcu generowania strony.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.