Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: exit; niszczy stronę!
Forum PHP.pl > Forum > PHP
waqmaz
Powiedzmy, że masz stronę css napisaną w index.php.
Jeżeli wywołasz funkcję z innego pliku zawierającą <?php exit; ?> na stronie .php, wtedy od miejsca, w którym została wywołana kod css jest obcięty!!! Czy ktoś wie dlaczego tak się dzieje i jakie są sposoby, aby to ominąć?

Przykład:


index.php:
  1. <div class="logo"></div>
  2. <?php require('plik_z_exitem.php');
  3. <div class="strona></div>
  4. <div class-"stopka></div>

plik_z_exitem.php:
  1. <?php exit; ?>


No i zamiast wyświetlić takie coś:
  1. <div class="logo"></div>
  2. <?php require('plik_z_exitem.php');
  3. <div class="strona></div>
  4. <div class-"stopka></div>

To wyświetla samo logo:
  1. <div class="logo"></div>
  2. <?php require('plik_z_exitem.php');

Czyli wszystko co pod exit zostaje wycięte. Strasznie wnerwiające to, gdyż np. chcę wprowadzić obsługę błędów w innym pliku np. logowania czy rejestracji, łączenia z bazą itp. no i wszystko działa, tylko mi obcina resztę strony, przez co wygląda okropnie, jak jakieś pogniecione badziewie. Wie ktoś jak to omijają inni?
Piogola
  1. if(czy_jest_blad == true){
  2. echo 'Wykryty błąd!';
  3. }else{
  4. echo 'Nie ma błędu, można kontynuować';
  5. }
  6. // Dalsza część strony


exit używa się tylko w krytycznych sytuacjach, kiedy jest jakiś błąd który powoduje, że strona nie będzie działać prawidłowo
mkdes
exit;
Przerywa wykonywanie skryptu. Więc nic co masz poniżej niego się nie wykona.
http://php.net/manual/en/function.exit.php
kulczycki
na chłopski rozum exit zachowuje się jak return w funkcji, tylko że exit działa na cały skrypt.
cipronex
Ja zazwyczaj stopkę mam w oddzielnym pliku i w przypadku gdy chcę zakończyć skrypt z jakiegoś powodu, to wygląda u mnie tak:

Kod
if (warunek) {
    print "Informacja o błędzie";
    require_once("plik stopki");
    exit;
}
waqmaz
Cytat(cipronex @ 3.02.2011, 18:45:23 ) *
Ja zazwyczaj stopkę mam w oddzielnym pliku i w przypadku gdy chcę zakończyć skrypt z jakiegoś powodu, to wygląda u mnie tak:

Kod
if (warunek) {
    print "Informacja o błędzie";
    require_once("plik stopki");
    exit;
}


Tak, tylko, że ja wyświetlam to w danym boxie w index.php a musiała by być pod tym boxem tongue.gif
btw. exit działa jak return true?
kulczycki
Może źle to ujałem. Bo nie zwraca żadnych danych, ale chodzi o samo zakańczanie działania skryptu. Ale możesz w exit wyświetlić informacje

exit('tresc');
waqmaz
w sumie jak daję return true; zamiast exit; to nie ucina mi strony i skrypt działa, prawie poprawnie smile.gif
benio101
przym przypadku nie ma znaczenia, co zwracasz, czy prawdę, czy fałsz, ważne, że return przerywa i tyle.
A exit robi to globalnie.
Pilsener
Tylko improwizujący amatorzy używają exit, die itp. bo nie potrafią (lub im się nie chce) zaimplementować obsługi błędów.
Najprościej wszędzie tam gdzie jest exit/die zrobić:
  1. $errors[] = 'Blad!';


I sprawdzać często i gęsto czy tablica błędów jest pusta, jeśli nie jest to ją wyświetlić + szablon strony błędu. Ładna strona błędu świadczy o nas smile.gif

A w nowych aplikacjach oczywiście używać wyjątków.
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.