Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problemy z nagłówkami.
pszpiler
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował pszpiler 6.10.2008, 15:25:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pszpiler
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Spirit86
post
Post #4





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


daj error_reporting(E_ALL); na początku skryptu


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
pszpiler
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

Ostrzeżenie: (0%)
-----


Cytat(Spirit86 @ 7.10.2008, 18:45:49 ) *
daj error_reporting(E_ALL); na początku skryptu

Zrobiłem tak. To niczego nie zmienia.
Go to the top of the page
+Quote Post
drPayton
post
Post #6





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
pszpiler
post
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.10.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:24