Cannot modify header information

0

przy wysyłaniu ciasteczka mam taki komunikat:

Warning: Cannot modify header information - headers already sent by (output started at...

i wskazuje na linijkę z ciasteczkiem,

 setcookie("send", time()+20, time()+20);

mam google adsense na stronie po usunięciu skryptu wraca do normy, jak to pogodzić?

2

No a nie jesteś w stanie tego swojego skryptu wykonać/odpalić przed uruchomieniem skryptów od Google'a?

3

Bo, żeby wysłać nagłówki, musisz to zrobić najpierw, przed wysłaniem HTMLa.

mam google adsense na stronie po usunięciu skryptu wraca do normy, jak to pogodzić?

To zrób tak, żeby dodawało później tego adsensa, po wysłaniu nagłówków.

5

Różne technologie w różny sposób obsługują wysyłanie body i headerów. Niektóre dopiero wysyłają nagłówki, kiedy cały skrypt skończy działanie, niektóre w momencie wywołania odpowiedniej funkcji. PHP należy do tej drugiej kategorii.

Błąd który widzisz znaczy że skrypt zaczął renderować ciało odpowiedzi żądania, a więc headery już zostały wysłane.

W prostych słowach, nie możesz zrobić echo przed zmianą headerów.

3

Wystarczy nawet biały znak w ciele źródła PHP, poza tagami <?php

1
ZrobieDobrze napisał(a):

Wystarczy nawet biały znak w ciele źródła PHP, poza tagami <?php

Tak, wielu ludzi lubi sobie kończyć kod tagiem ?>, a ?> to właściwie jest tożsame z echo (bo wszystko co jest potem jest wyrenderowane)

0

Php mam zagnieżdżony w body, szukam rozwiązania, ale popróbuję. Tak to rozwiązałem, że reklamy google skasowałem, teraz będę uważał, :}

A jeszcze takie pytanie, czy zmienne można przekazać tylko formularzem? chodzi mi o kliknięcie w link który przekaże wiadomość na podstronę?

Tag manager google instaluje skrypt na każdej stronie w head i body, i to powoduje "...headers already sent... "
Na stronie mam formularz z jednym polem suspkrybcja, a więc skrypt google pobiera nagłówek przed wywołaniem funkcji php, jest jakieś rozwiązanie?

1
foczka344 napisał(a):

Php mam zagnieżdżony w body, szukam rozwiązania, ale popróbuję. Tak to rozwiązałem, że reklamy google skasowałem, teraz będę uważał, :}

To nie jest dobry sposób żeby do tego podchodzić, nie ma czegoś takiego jak "zagnieżdżanie PHP w <body>". Składnia PHP próbuje tak wyglądać, ale to jest niepoprawne podejście. <body> to jest HTML, czyli po prostu wynik działania PHP, nie da się kodu PHP osadzić w HTML. Dużo lepszy podejściem jest wykonać całą logikę PHP wcześniej, a dopiero poniżej renderować HTML. Dużo kłopotów sobie tym oszczędzisz. PHP to nie jest JavaScript, który faktycznie można osadzić w HTML'u i ten kod faktycznie się może wykonać w otoczeniu HTML'a u klienta. Ale PHP wykonuje się na serverze, - to iluzja, trick składniowy.

foczka344 napisał(a):

A jeszcze takie pytanie, czy zmienne można przekazać tylko formularzem? chodzi mi o kliknięcie w link który przekaże wiadomość na podstronę?

To jest kolejna miskoncepcja wynikła z tego że PHP próbuje udawać rzeczy którymi nie jest. Nie da się przekazać "zmiennych" z HTML do PHP, to co możesz zrobić to wysłać żądanie (w tym wypadku HTTP), i przesłać dane w tym żądaniu (albo w body, albo przez query params, albo przez nagłówki). Wysłanie danych przez formularz to jeden ze sposobów umieszczenia danych w body żądania.

Tag manager google instaluje skrypt na każdej stronie w head i body, i to powoduje "...headers already sent... "
Na stronie mam formularz z jednym polem suspkrybcja, a więc skrypt google pobiera nagłówek przed wywołaniem funkcji php, jest jakieś rozwiązanie?

No rozwiązaniem na to jest pisanie aplikacji w PHP tak jak się to powinno robić, a nie tak jak PHP to opisuje w dokumentacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1