J'ai écrit un code PHP comme celui-ci
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Mais lorsque je supprime "http: //" de $site
j'obtiens l'avertissement suivant:
Avertissement: file_get_contents (www.google.com) [function.file-get-contents]: impossible d'ouvrir le flux:
J'ai essayé try
et catch
ça n'a pas marché.
Réponses:
Étape 1: vérifiez le code retour:
if($content === FALSE) { // handle error here... }
Étape 2: supprimez l'avertissement en plaçant un opérateur de contrôle d'erreur (c'est-à-dire
@
) devant l'appel à file_get_contents () :$content = @file_get_contents($site);
la source
@
peut avoir un impact négatif sur les performances. Voir cette réponse sur un poste connexe qui explique assez bien.Vous pouvez également définir votre gestionnaire d'erreurs comme une fonction anonyme qui appelle une exception et utiliser un try / catch sur cette exception.
Il semble que beaucoup de code détecte une petite erreur, mais si vous utilisez des exceptions dans votre application, vous n'aurez besoin de le faire qu'une seule fois, tout en haut (dans un fichier de configuration inclus, par exemple), et il le fera convertir toutes vos erreurs en exceptions tout au long.
la source
Ma façon préférée de le faire est assez simple:
J'ai trouvé cela après avoir expérimenté avec le
try/catch
@enobrev ci-dessus, mais cela permet un code moins long (et IMO, plus lisible). Nous utilisons simplementerror_get_last
pour obtenir le texte de la dernière erreur, etfile_get_contents
renvoie false en cas d'échec, donc un simple "si" peut le détecter.la source
@file_get_contents
pour supprimer le rapport d'erreur au navigateur.@file_get_contents
pour supprimer l'avertissement et tester la valeur du résultat à l'aide=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
ne rien retourner de mon expérienceVous pouvez ajouter un @:
$content = @file_get_contents($site);
Cela supprimera tout avertissement - utilisez-le avec parcimonie! . Voir Opérateurs de contrôle d'erreur
Edit: Lorsque vous supprimez le 'http: //', vous ne recherchez plus une page Web, mais un fichier sur votre disque appelé "www.google ....."
la source
Une alternative consiste à supprimer l'erreur et à lever également une exception que vous pourrez intercepter ultérieurement. Cela est particulièrement utile s'il existe plusieurs appels à file_get_contents () dans votre code, car vous n'avez pas besoin de les supprimer et de les gérer tous manuellement. Au lieu de cela, plusieurs appels peuvent être effectués vers cette fonction dans un seul bloc try / catch.
la source
Voici comment je l'ai fait ... Pas besoin de bloc try-catch ... La meilleure solution est toujours la plus simple ... Profitez-en!
la source
$http_response_header
n'est pas mis à jour dans ce cas, car aucune réponse HTTP n'est reçue.la source
$url
404 est introuvable, un avertissement apparaîtra toujours.ignore_errors
indique uniquement au contexte HTTP de ne pas interpréter les codes d'état de réponse HTTP > = 400 comme des erreurs. Bien que marginalement lié, cela ne répond pas à la question de la gestion des erreurs PHP.ignore_errors
option! Voilà ce dont j'avais besoin!Voici comment je gère cela:
la source
La meilleure chose serait de définir vos propres gestionnaires d'erreurs et d'exceptions qui feront quelque chose d'utile comme la journalisation dans un fichier ou l'envoi par e-mail des fichiers critiques. http://www.php.net/set_error_handler
la source
Vous pouvez utiliser ce script
la source
if ($url === true)...
car si vous obtenez une réponse0
ou vide, cela soulève une erreur de connexion.Depuis PHP 4, utilisez error_reporting () :
la source
La façon la plus simple de le faire est de simplement ajouter un @ avant file_get_contents, i. e .:
la source
quelque chose comme ça:
la source
la source
Vous devez utiliser la fonction file_exists () avant d'utiliser file_get_contents (). De cette façon, vous éviterez l'avertissement php.
la source
Changer le fichier php.ini
la source
Cela essaiera d'obtenir les données, si cela ne fonctionne pas, il détectera l'erreur et vous permettra de faire tout ce dont vous avez besoin dans la capture.
la source
la source
Vous devez également définir
dans votre
php.ini
pour cesser de recevoir des avertissements.la source