Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problemy z nagłówkami.
Forum PHP.pl > Forum > Przedszkole
pszpiler
Mam dwa pytania odnośnie nagłówków. Chodzi mianowicie o funkcje header(). Oczywiście funkcja ta powinna wyrzucić ostrzeżenie jeśli wcześniej wysłano już nagłówki do przeglądarki. Czyli poniższy przykładowy kod:

  1. <?php
  2. echo 'some text';
  3. header('location: script.php');
  4. ?>


powinien wywołać zgłoszenie ostrzeżenia w stylu:
Cytat
Warning: Cannot modify header information - headers already sent by (...)


No i tu zaczyna się problem pierwszy. Kiedy napisze i wywołam prosty skrypt php jak wyżej lokalnie (Apache) to nie jest generowane żadne ostrzeżenie. Kiedy natomiast zrobię to na docelowym serwerze produkcyjnym to oczywiście pojawia się ostrzeżenie. Pytanie brzmi dlaczego tak jest? I czy można jakoś skonfigurować Apache'a czy też php, aby te ostrzeżenia były wyświetlane u mnie lokalnie? Jeśli chodzi o konfiguracje php to mam włączone raportowanie o wszystkich błędach i ostrzeżeniach:

Cytat
error_reporting = E_ALL
display_errors = On


Drugi problem również dotyczy nagłówków i funkcji header(). Przy odbiorze i przetwarzaniu danych z formularza korzystam z następującego schematu.

Plik formularza:
  1. <form action="script.php" method="post">
  2. <input type="text" name="field" />
  3. <input type="submit" value="-wyślij-" />
  4. </form>


Plik script.php:
  1. <?php
  2. //tutaj jakiejś akcje przetwarzające dane z pól formularza
  3. header('location: result.php');
  4. exit();
  5. ?>


Myślę, że to dobre podejście bo pozwala uniknąć problemu wyświetlania irytujących komunikatów i dodawania wielokrotnie tych samych danych do bazy danych przy odświeżaniu strony. Plik script.php przetwarza dane i przekierowuje do innego skryptu gdzie może zostać wyświetlony na przykład komunikat o prawidłowości przebiegu operacji. Przekierowanie może być również do miejsca gdzie są wyświetlane pozostałe na przykład komentarze, czy też inne wpisy w bazie danych. Niestety znów jest różnica w działaniu lokalnie i na właściwym komercyjnym serwerze. Na docelowym serwerze znów generowane są ostrzeżenia i skrypt nie wykonuje się do końca, natomiast lokalnie wszystko działa prawidłowo. Myślę, że należycie zadbałem o to, aby nie było żadnych pustych znaków przed użyciem funkcji header(). Nie wiem w czym problem, proszę o pomoc.

Czy, aby na pewno nikt nie potrafi odpowiedzieć na moje pytania?
nospor
lokalnie masz włączone buforowanie w php a na serwerze nie masz stad ta roznica.
Musisz w skrypcie sam wlaczyc buforowanie: dac ob_start() na samym poczatku glownego skryptu

Ale o tym byla juz wiele razy mowa
pszpiler
Jeśli poniższa linia w pliku konfiguracyjnym php.ini wyłącza buforowanie lokalnie:

Kod
       output_buffering = Off

to znaczy, że mam wyłączone buforowanie. Niestety mimo tego lokalnie nie wyświetlają się, żadne ostrzeżenia jeśli chodzi o nagłówki.

Już wcześniej próbowałem wykorzystać funkcje ob_start(). Niestety nadal dla niektórych skryptów na serwerze docelowym pojawiają się komunikaty o tym, że już wysłano wcześniej nagłówek.
Spirit86
daj error_reporting(E_ALL); na początku skryptu
pszpiler
Cytat(Spirit86 @ 7.10.2008, 18:45:49 ) *
daj error_reporting(E_ALL); na początku skryptu

Zrobiłem tak. To niczego nie zmienia.
drPayton
Cytat(pszpiler @ 7.10.2008, 17:45:09 ) *
(...)
Już wcześniej próbowałem wykorzystać funkcje ob_start(). Niestety nadal dla niektórych skryptów na serwerze docelowym pojawiają się komunikaty o tym, że już wysłano wcześniej nagłówek.


Taki strzał: Nie jest to jakiś darmowy hosting? Niektóre dodają swoje reklamy w taki sposób, że pojawiają się przed Twoim właściwym skryptem...
pszpiler
Cytat(drPayton @ 7.10.2008, 21:05:12 ) *
Taki strzał: Nie jest to jakiś darmowy hosting? Niektóre dodają swoje reklamy w taki sposób, że pojawiają się przed Twoim właściwym skryptem...

Skrypt wypróbowałem na darmowym i komercyjnym (płatnym) hostingu. W obu przypadkach właściwie ten sam efekt.
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.