Napisałem taki kod PHP
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Ale kiedy usuwam „http: //” z, pojawia $site
się następujące ostrzeżenie:
Ostrzeżenie: file_get_contents (www.google.com) [function.file-get-content]: nie można otworzyć strumienia:
Próbowałem try
i catch
ale to nie działa.
php
function
exception-handling
warnings
Waseem
źródło
źródło
Odpowiedzi:
Krok 1: Sprawdź kod powrotu:
if($content === FALSE) { // handle error here... }
Krok 2: Pomiń ostrzeżenie, umieszczając operator kontroli błędów (tj.
@
) Przed wywołaniem file_get_contents () :$content = @file_get_contents($site);
źródło
@
może negatywnie wpłynąć na wydajność. Zobacz tę odpowiedź na powiązany post, który wyjaśnia dość dobrze.Możesz również ustawić swój moduł obsługi błędów jako anonimową funkcję, która wywołuje wyjątek i użyć try / catch dla tego wyjątku.
Wygląda na to, że dużo kodu łapie jeden mały błąd, ale jeśli używasz wyjątków w całej aplikacji, musisz to zrobić tylko raz, na górze (na przykład w dołączonym pliku konfiguracyjnym), i to zrobi przekonwertować wszystkie swoje błędy na wyjątki.
źródło
Mój ulubiony sposób na zrobienie tego jest dość prosty:
Znalazłem to po eksperymentach z
try/catch
powyższym @enobrev, ale pozwala to na użycie mniej długiego (i IMO, bardziej czytelnego) kodu. Po prostu używamy,error_get_last
aby uzyskać tekst ostatniego błędu ifile_get_contents
zwraca błąd w przypadku niepowodzenia, więc proste „jeśli” może to złapać.źródło
@file_get_contents
aby ukryć zgłaszanie błędów do przeglądarki.@file_get_contents
aby wyłączyć ostrzeżenie i przetestować wartość wyniku za pomocą=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
że nic nie zwróci z mojego doświadczeniaMożesz dodać @:
$content = @file_get_contents($site);
Pominie to ostrzeżenie - używaj oszczędnie! . Zobacz Operatory kontroli błędów
Edycja: po usunięciu „http: //” nie szukasz już strony internetowej, ale plik na dysku o nazwie „www.google .....”
źródło
Jedną z możliwości jest wyeliminowanie błędu, a także zgłoszenie wyjątku, który można złapać później. Jest to szczególnie przydatne, jeśli w kodzie znajduje się wiele wywołań funkcji file_get_contents (), ponieważ nie trzeba tłumić i obsługiwać ich wszystkich ręcznie. Zamiast tego można wykonać kilka wywołań tej funkcji w jednym bloku try / catch.
źródło
Oto jak to zrobiłem ... Nie trzeba blokować try-catch ... Najlepsze rozwiązanie jest zawsze najprostsze ... Ciesz się!
źródło
$http_response_header
w takim przypadku nie jest aktualizowany, ponieważ nie otrzymano odpowiedzi HTTP.źródło
$url
nie znaleziono 404, ostrzeżenie będzie nadal wyświetlane.ignore_errors
instruuje tylko kontekst HTTP, aby nie interpretował kodów statusu odpowiedzi HTTP > = 400 jako błędów. Choć marginalnie spokrewniony, nie odpowiada na pytanie o obsługę błędów PHP.ignore_errors
opcję! Właśnie tego potrzebowałem!Oto jak sobie z tym poradzić:
źródło
Najlepiej byłoby ustawić własne procedury obsługi błędów i wyjątków, które zrobią coś pożytecznego, np. Zalogowanie do pliku lub przesłanie krytycznych wiadomości e-mail. http://www.php.net/set_error_handler
źródło
Możesz użyć tego skryptu
źródło
if ($url === true)...
ponieważ jeśli otrzymujesz odpowiedź0
lub jest pusty, powoduje to błąd połączenia.Ponieważ PHP 4 używa error_reporting () :
źródło
Najprostszym sposobem na to jest po prostu wstawienie @ przed file_get_contents, tj. mi.:
źródło
coś takiego:
źródło
źródło
Przed użyciem file_get_contents () należy użyć funkcji file_exists (). W ten sposób unikniesz ostrzeżenia php.
źródło
Zmień plik php.ini
źródło
Spróbuje to uzyskać dane, jeśli to nie zadziała, złapie błąd i pozwoli ci zrobić wszystko, czego potrzebujesz w ramach tego połowu.
źródło
źródło
Powinieneś także ustawić
W twojej
php.ini
przestać otrzymywać ostrzeżenia.źródło