Ich habe so einen PHP-Code geschrieben
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Wenn ich jedoch "http: //" entferne $site
, wird folgende Warnung angezeigt:
Warnung: file_get_contents (www.google.com) [function.file-get-content]: Stream konnte nicht geöffnet werden:
Ich habe es versucht try
und catch
aber es hat nicht funktioniert.
php
function
exception-handling
warnings
Waseem
quelle
quelle
Antworten:
Schritt 1: Überprüfen Sie den Rückkehrcode:
if($content === FALSE) { // handle error here... }
Schritt 2: Unterdrücken Sie die Warnung, indem Sie einen Fehlerkontrolloperator (dh
@
) vor den Aufruf von file_get_contents () stellen :$content = @file_get_contents($site);
quelle
@
die Leistung negativ beeinflussen kann. Siehe diese Antwort in einem verwandten Beitrag, der ziemlich gut erklärt.Sie können Ihren Fehlerbehandler auch als anonyme Funktion festlegen , die eine Ausnahme aufruft, und diese Ausnahme mit try / catch ausführen.
Es scheint eine Menge Code zu sein, um einen kleinen Fehler abzufangen. Wenn Sie jedoch Ausnahmen in Ihrer gesamten App verwenden, müssen Sie dies nur einmal tun, ganz oben (z. B. in einer enthaltenen Konfigurationsdatei) Konvertieren Sie alle Ihre Fehler durchgehend in Ausnahmen.
quelle
Meine Lieblingsmethode ist ziemlich einfach:
Ich fand dies nach dem Experimentieren mit dem
try/catch
von @enobrev oben, aber dies ermöglicht weniger langen (und IMO, besser lesbaren) Code. Wir verwenden einfacherror_get_last
, um den Text des letzten Fehlers abzurufen, und geben bei einem Fehlerfile_get_contents
false zurück, sodass ein einfaches "Wenn" dies abfangen kann.quelle
@file_get_contents
, um die Fehlerberichterstattung an den Browser zu unterdrücken.@file_get_contents
, um die Warnung zu unterdrücken und den Ergebniswert mit zu testen=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
meiner Erfahrung nach nichts zurückgebenSie können ein @ voranstellen:
$content = @file_get_contents($site);
Dies wird jede Warnung unterdrücken - sparsam verwenden! . Siehe Fehlerkontrolloperatoren
Bearbeiten: Wenn Sie das 'http: //' entfernen, suchen Sie nicht mehr nach einer Webseite, sondern nach einer Datei auf Ihrer Festplatte mit dem Namen "www.google .....".
quelle
Eine Alternative besteht darin, den Fehler zu unterdrücken und eine Ausnahme auszulösen, die Sie später abfangen können. Dies ist besonders nützlich, wenn Ihr Code mehrere Aufrufe von file_get_contents () enthält, da Sie nicht alle manuell unterdrücken und verarbeiten müssen. Stattdessen können mehrere Funktionen in einem einzigen Try / Catch-Block aufgerufen werden.
quelle
So habe ich es gemacht ... Kein Try-Catch-Block erforderlich ... Die beste Lösung ist immer die einfachste ... Viel Spaß!
quelle
$http_response_header
wird in diesem Fall nicht aktualisiert, da keine HTTP-Antwort empfangen wird.quelle
$url
Wert 404 nicht gefunden wird, wird weiterhin eine Warnung angezeigt.ignore_errors
Weist den HTTP-Kontext nur an, HTTP- Antwortstatuscodes> = 400 nicht als Fehler zu interpretieren . Dies ist zwar nur geringfügig verwandt, beantwortet jedoch nicht die Frage der PHP-Fehlerbehandlung.ignore_errors
Option! Das habe ich gebraucht!So gehe ich damit um:
quelle
Am besten legen Sie Ihre eigenen Fehler- und Ausnahmehandler fest, die etwas Nützliches tun, z. B. das Protokollieren in einer Datei oder das Versenden kritischer E-Mails. http://www.php.net/set_error_handler
quelle
Sie könnten dieses Skript verwenden
quelle
if ($url === true)...
Wenn Sie als Antwort0
oder leer erhalten, wird ein Verbindungsfehler ausgelöst.Verwenden Sie seit PHP 4 error_reporting () :
quelle
Der einfachste Weg, dies zu tun, besteht darin, ein @ vor file_get_contents zu stellen, d.h. e.:
quelle
etwas wie das:
quelle
quelle
Sie sollten die Funktion file_exists () verwenden, bevor Sie file_get_contents () verwenden. Auf diese Weise vermeiden Sie die PHP-Warnung.
quelle
Ändern Sie die Datei php.ini
quelle
Dadurch wird versucht, die Daten abzurufen. Wenn dies nicht funktioniert, wird der Fehler abgefangen und Sie können alles tun, was Sie innerhalb des Catch benötigen.
quelle
quelle
Sie sollten auch die einstellen
in Ihrem
php.ini
, um keine Warnungen mehr zu erhalten.quelle