Czy jest między nimi jakaś różnica? Czy ich używanie jest kwestią preferencji? Czy używanie jednego nad drugim daje jakieś korzyści? Co jest lepsze z punktu widzenia bezpieczeństwa?
Zawsze używaj „wymagają”. „Włączanie” jest tak wygodne, jak elektryczne drzwi w saunie.
Marco Mariani,
2
@MarcoMariani Jakie byłoby to niewygodne? Prawdopodobnie jest jasne, po prostu tego nie widzę. Może para?
Austin Burk
Mówiąc prościej, jeśli przez pomyłkę brakuje pliku „foo.php”, chcę wiedzieć jak najszybciej, a nie kiedy wywoływana jest funkcja, która powinna znajdować się w foo.php. Zastąpienie dołączenia wymaganiem może często ujawnić błędy. Powiedzmy, że brakuje pliku config.php, a aplikacja działa z domyślną konfiguracją. Co jest lepsze z punktu widzenia bezpieczeństwa? Jeśli chodzi o saunę, to kiedy jestem w środku i drzwi z jakiegoś powodu się nie otwierają, to mi się nie podoba.
Marco Mariani
Odpowiedzi:
148
Różnice wyjaśniono w szczegółowym podręczniku PHP na stronierequire :
requirejest identyczny z includewyjątkiem sytuacji, gdy wystąpi błąd, spowoduje również krytyczny E_COMPILE_ERRORbłąd poziomu. Innymi słowy, zatrzyma skrypt, podczas gdy include emituje tylko ostrzeżenie ( E_WARNING), które pozwala skryptu kontynuować.
tiposaurus.co.uk/2011/04/04/… "Główna różnica między require () i include () polega na tym, że jeśli potrzebujesz () pliku, którego nie można załadować (np. jeśli go nie ma), to generuje błąd krytyczny, który całkowicie zatrzyma wykonanie strony i nie będzie już generowane żadne dane wyjściowe. Z drugiej strony, jeśli dołączysz () plik, którego nie można załadować, wygeneruje to jedynie ostrzeżenie i kontynuuj tworzenie strony ”.
stormwild
3
„To, którego należy użyć, zależy od sytuacji; require () najlepiej nadaje się do ładowania plików, które są niezbędne dla pozostałej części strony - na przykład, jeśli masz witrynę opartą na bazie danych, użyj require () do dołączenia pliku zawierającego login i hasło bazy danych są zdecydowanie preferowane w stosunku do funkcji include (). Jeśli użyłeś funkcji include () w tej sytuacji, możesz wygenerować więcej ostrzeżeń i błędów, niż zamierzałeś. "
stormwild
3
<?php if (isset($flibbertygibbet)) require 'file.php';wydaje się, że ta odpowiedź wygląda na całkowicie niepoprawną. W przeciwnym razie powinienem otrzymać błąd krytyczny, nawet jeśli warunek nie jest prawdziwy. stracenie pokazuje PHP nawet próbującego dotknąć file.php.
cHao
W przeciwieństwie do funkcji include (), require () zawsze czyta plik docelowy, nawet jeśli linia, w której się znajduje, nigdy nie zostanie wykonana. Jeśli chcesz warunkowo dołączyć plik, użyj funkcji include (). AND Jednakże, jeśli wiersz, w którym występuje require (), nie zostanie wykonany, żaden kod z pliku docelowego nie zostanie wykonany. Wydaje się, że mówię coś przeciwnego, czy też nie rozumiem?
lorless
1
Wszystkie te komentarze odnoszą się do oryginalnej wersji tej odpowiedzi przed jej zredagowaniem. Pierwotnie istniało nieprawidłowe żądanie, twierdzące, if (false) require 'file.php';że spowoduje załadowanie (ale nie wykonanie) pliku „file.php”. TLDR ignoruje wszystkie te komentarze.
Kevin Wheeler
181
requirezgłosi błąd krytyczny PHP, jeśli nie można załadować pliku. (Wykonanie zatrzymane)
includegeneruje Ostrzeżenie, jeśli nie można załadować pliku. (Egzekucja trwa)
Użyj, includejeśli nie masz nic przeciwko kontynuowaniu skryptu bez ładowania pliku (jeśli nie istnieje itp.) I możesz (chociaż nie powinieneś) żyć z wyświetlanym komunikatem o błędzie ostrzegawczym.
Użycie requireoznacza, że skrypt zatrzyma się, jeśli nie może załadować określonego pliku, i zgłosi błąd krytyczny.
Jak wskazywali inni, jedyną różnicą jest to, że wymaga rzucania krytycznego błędu, a dołącza - dające się złapać ostrzeżenie. Jeśli chodzi o to, którego użyć, radzę trzymać się tego. Czemu? ponieważ możesz złapać ostrzeżenie i przekazać znaczącą opinię użytkownikom końcowym. Rozważać
// Example 1.// users see a standard php error message or a blank screen// depending on your display_errors settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
Na poziomie włączenia nie jest to świetne miejsce, aby dowiedzieć się, że nie ma tam pliku, którego oczekujesz. Żaden problem w twoim przykładzie nie jest problemem, który można zepchnąć na użytkowników Twojej witryny.
Kzqai
0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";?>
Bardzo prosty Praktyczny przykład z kodem.
Zostanie wyświetlone pierwsze echo. Bez względu na to, czy używasz include lub require, ponieważ jest uruchamiany przed dołączeniem lub wymaganiem.
Aby sprawdzić wynik, w drugiej linii kodu celowo podaj złą ścieżkę do pliku lub popełnij błąd w nazwie pliku. Zatem drugie echo, które ma zostać wyświetlone, będzie całkowicie zależne od tego, czy używasz wymagania, czy dołączenia .
Jeśli używasz wymagania, drugie echo nie zostanie wykonane, ale jeśli użyjesz dołączania, niezależnie od rodzaju błędu, zobaczysz również wynik drugiego echa.
W przypadku dołączenia program nie zakończy działania i nie wyświetli ostrzeżenia w przeglądarce, z drugiej strony, program Require zakończy działanie i wyświetli błąd krytyczny w przypadku nieznalezienia pliku.
Odpowiedzi:
Różnice wyjaśniono w szczegółowym podręczniku PHP na stronie
require
:Zobacz @ odpowiedź efritz jest na przykład
źródło
<?php if (isset($flibbertygibbet)) require 'file.php';
wydaje się, że ta odpowiedź wygląda na całkowicie niepoprawną. W przeciwnym razie powinienem otrzymać błąd krytyczny, nawet jeśli warunek nie jest prawdziwy.strace
nie pokazuje PHP nawet próbującego dotknąćfile.php
.if (false) require 'file.php';
że spowoduje załadowanie (ale nie wykonanie) pliku „file.php”. TLDR ignoruje wszystkie te komentarze.require
zgłosi błąd krytyczny PHP, jeśli nie można załadować pliku. (Wykonanie zatrzymane)include
generuje Ostrzeżenie, jeśli nie można załadować pliku. (Egzekucja trwa)Oto ładna ilustracja uwzględniająca i wymagająca różnicy :
źródło
Użyj,
include
jeśli nie masz nic przeciwko kontynuowaniu skryptu bez ładowania pliku (jeśli nie istnieje itp.) I możesz (chociaż nie powinieneś) żyć z wyświetlanym komunikatem o błędzie ostrzegawczym.Użycie
require
oznacza, że skrypt zatrzyma się, jeśli nie może załadować określonego pliku, i zgłosi błąd krytyczny.źródło
Jak wskazywali inni, jedyną różnicą jest to, że wymaga rzucania krytycznego błędu, a dołącza - dające się złapać ostrzeżenie. Jeśli chodzi o to, którego użyć, radzę trzymać się tego. Czemu? ponieważ możesz złapać ostrzeżenie i przekazać znaczącą opinię użytkownikom końcowym. Rozważać
Uwaga: na przykład 2, aby działać, musisz zainstalować program obsługi błędów do wyjątków, jak opisano tutaj http://www.php.net/manual/en/class.errorexception.php
źródło
Bardzo prosty Praktyczny przykład z kodem. Zostanie wyświetlone pierwsze echo. Bez względu na to, czy używasz include lub require, ponieważ jest uruchamiany przed dołączeniem lub wymaganiem.
Aby sprawdzić wynik, w drugiej linii kodu celowo podaj złą ścieżkę do pliku lub popełnij błąd w nazwie pliku. Zatem drugie echo, które ma zostać wyświetlone, będzie całkowicie zależne od tego, czy używasz wymagania, czy dołączenia .
Jeśli używasz wymagania, drugie echo nie zostanie wykonane, ale jeśli użyjesz dołączania, niezależnie od rodzaju błędu, zobaczysz również wynik drugiego echa.
źródło
W przypadku dołączenia program nie zakończy działania i nie wyświetli ostrzeżenia w przeglądarce, z drugiej strony, program Require zakończy działanie i wyświetli błąd krytyczny w przypadku nieznalezienia pliku.
źródło