![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%) ![]() ![]() |
Tworzę już chyba z tydzień, system rejestracji z całym oprzyrządowaniem, przypomnienie hasła itd.. W związku z tym chciałbym poznać Twoją opinie.
Czy jest to nierozerwalnie związane z session_start? Zawsze jedno ob musi być przed nim a drugie ob za nim. Czy mają być na końcach plików, niezależnie od fragmentów <?php?>? Dowiedziałem się że przed każdym session_start(); musi być ob_start(); a na zakończenie(ale w którym dokładnie miejscu, co znaczy zakończenie?) ma być ob_end_flush(). Początek każdego pliku zazwyczaj wygląda u mnie tak.
Początek znaczy, nawet przed "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">" Później mam kilka sektorów <?php?> i wszystko zdaje się działać niezależnie od tego czy w pliku jest gdziekolwiek ob_end_flush(); . Czy może tego nie widać, nie wywala błędów, ale trzeba to wstawić bo brak tego czymś grozi? Proszę mnie ignorancko nie odsyłać do manuala, bo gdybym tam nie sprawdzał, nie pisał bym takiego długiego postu. Tam jest bardziej definicja, a mi chodzi o OPINIE i rady. Czy i dlaczego nie wystarczy samo session_start(); ? Ten post edytował Tho 30.10.2011, 20:02:36 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
1. Koduj pliki w utf-8 bez bom
2. nie musisz nigdzie używać ob_start(), wystarczy że mądrze rozplanujesz sobie skrypt. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%) ![]() ![]() |
Kilka razy <?php ... ?> na stronie? Nie ma nic złego w tym? Co rozumiesz przez mądrze, bez błędów?
Czy może być samo session_start gdzieś w środku strony(oczywiście przed całą treścią php)? Jak do tej pory takie działanie powoduje wywalanie błędów i musiałem wstawić to - razem z ob_start(). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 39 Dołączył: 6.12.2010 Skąd: localhost Ostrzeżenie: (0%) ![]() ![]() |
Sesje musisz wystartować na samym początku. Wielokrotne <?php ?> to nic złego, często się korzysta z tego, jest to tzw. wyskakiwanie z PHP.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 44 Dołączył: 31.07.2011 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
w3
Sesje musisz wystartować na samym początku. Wielokrotne <?php ?> to nic złego, często się korzysta z tego, jest to tzw. wyskakiwanie z PHP. Dokładniej to należy użyć przed wysłaniem czegokolwiek do przeglądarki, ze względu na wykorzystanie cookies. Ten post edytował crocodillo 30.10.2011, 21:57:24 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 0 Dołączył: 26.07.2011 Ostrzeżenie: (20%) ![]() ![]() |
1. Koduj pliki w utf-8 bez bom 2. nie musisz nigdzie używać ob_start(), wystarczy że mądrze rozplanujesz sobie skrypt. 1. Wszystkie pliki mam zakodowane w UTF-8 bez BOM. 2. Sprawa nie jest taka prosta, bo jeśli to prawda "nie musisz używać", to dlaczego wstawienie ob_start() spowodowało zniknięcie tego błędu, nie wstawiałem ob_end_flush(), samo ob_start na samym początku pliku, przed session_start, to wystarczyło by zniknął komunikat błędu. Pytanie, czy zamknąć "ob" poprzez ob_end_flush()? I dlaczego to jest takie ważne, by to otworzyć, bo bez tego nie przejdzie, a już nie trzeba zamykać(z tego co zauważyłem jak dotąd, być może jest to konieczne, ale jak narazie nie zauważyłem błędów spowodowanych brakiem tego. Jak to jest? Proszę nie zamykać tego tematu jak poprzednio, uzasadnieniem "To już było", bo stare wątki na ten temat przeszukałem i nie znalazłem tam odpowiedzi na to akurat pytanie. Ten post edytował Tho 31.10.2011, 10:06:54 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zacznijmy od tego:
Cytat Dowiedziałem się że przed każdym session_start(); musi być ob_start(); gdzie ty taką informację przeczytałeś? Dlaczego ci błąd zniknął? Najlepiej zobrazuje to ten skrypt: Kod <?php ob_start(); echo $nie_istniejaca_zmienna; ob_get_clean(); Normalnie powinieneś dostać notice, że użyłeś zmiennej która nie istnieje, a teraz zobacz na ten skrypt: Kod <?php ob_start(); echo $nie_istniejaca_zmienna; $ob = ob_get_clean(); echo $ob; $ob przechowuje teraz efekt działania echo $nie_istniejaca_zmienna; jeżeli wyświetlisz wynik $ob, w efekcie czego dostaniesz błąd, ten który powinieneś dostać, że używasz zmiennej ($nie_istniejaca_zmienna) która najzwyczajniej nie istnieje. Poczytaj sobie w manualu o buforze, tutaj to chyba dość łopatologicznie przedstawiłem. Często się używa bufora w celu manipulacji późniejszymi danymi, jak chociażby zmiana w html, czy inne rzeczy. Jeżeli nie potrzebujesz tego, to nie musisz używać ob_* nigdzie, a to że gdzieś pisze że z session musi być ob_* to jest bzdura. Zamiast czytać kursy w internecie, kup sobie porządną książkę, a wszystkie swoje wątpliwości co do języka weryfikuj w manualu (oczywiście nie omijaj również komentarzy pod opisem danej rzeczy w manualu, bo one są bardzo pomocne), bo w tej chwili zakładasz tematy i pytasz się niekiedy o rzeczy które są banalne i są umieszczone w manualu czy najprostszych kursach, efektem czego jest tworzenie jakiegoś kursu dla ciebie tutaj na forum. Taki formularz rejestracji czy nawet gotowy cały sklep, można napisać krok po kroku w wielu książkach, gdzie ci wytłumaczą każdą jedną rzecz co powinno rozwiać twoje wątpliwości. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
ob_start() służy do włączenia buforowania wyjścia. To z kolei powoduje, że wynik działania skryptu nie jest od razu wysyłany na wyjście, ale jest zapisywany w wewnętrznym buforze. Wyjątkiem są funkcje, które modyfikują nagłówki (np. header, session_start). Funkcje te działają niejako "poza" wspomnianym buforem.
Cytat 2. Sprawa nie jest taka prosta, bo jeśli to prawda "nie musisz używać", to dlaczego wstawienie ob_start() spowodowało zniknięcie tego błędu, nie wstawiałem ob_end_flush(), samo ob_start na samym początku pliku, przed session_start, to wystarczyło by zniknął komunikat błędu. Owszem, to wystarczyło, aby zniknął komunikat błędu, ale sam problem nie został rozwiązany i błąd nadal gdzieś tkwi. W dodatku teraz trudniej będzie go znaleźć. ob_end_flush() powoduje wysłanie zawartości wewnętrznego bufora na wyjście i wyłączenie buforowania wyjścia. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 13:11 |