Comment puis-je gérer l'avertissement de file_get_contents() fonction en PHP?
J'ai écrit un bout de code PHP comme ceci
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Mais quand j'enlève "http://" de l' $site
je reçois le message d'avertissement suivant:
Avertissement:
file_get_contents(www.google.com)
[function.file-get-contents]: failed
to open stream:
J'ai essayé try
et catch
mais il ne fonctionne pas.
- Également une approche intéressante: stackoverflow.com/questions/6718598/...
- Connexes: stackoverflow.com/q/2002610
- Utiliser try-catch avec set_error_handler fonction comme l'a dit ici stackoverflow.com/a/3406181/1046909
- Si vous supprimez http:// à partir de l'url, alors vous êtes à la recherche d'un fichier "www.google.com" sur votre disque local.
- Comment cela peut-il avoir autant d'attention et de upvotes. Pourquoi voulez-vous supprimer les informations de protocole. Même en 2008, vous aviez FTP et HTTPS.
Vous devez vous connecter pour publier un commentaire.
Étape 1: vérifier le code de retour:
if($content === FALSE) { //handle error here... }
Étape 2: supprimer l'avertissement en mettant un le contrôle d'erreur de l'opérateur (c'est à dire
@
) en face de l'appel à file_get_contents():$content = @file_get_contents($site);
@
peut nuire aux performances. Voir cette réponse sur un post qui explique assez bien.errno
à partir d'un fonctionnement en mode local, ou le code de statut HTTP à partir d'une télécommande?Vous pouvez également définissez votre gestionnaire d'erreur comme un fonction anonyme qui appelle une Exception et utiliser un try /catch sur cette exception.
Semble que beaucoup de code pour prendre un peu d'erreur, mais si vous êtes en utilisant les exceptions dans votre application, vous n'aurez qu'à le faire une fois, de façon à le haut (dans un fichier de configuration, par exemple), et il vous permet de convertir toutes vos erreurs des Exceptions partout.
Ma façon préférée de le faire est assez simple:
J'ai trouvé ce après avoir testé la
try/catch
de @enobrev ci-dessus, mais cela permet de moins longue (et de l'OMI, plus lisible) du code. Nous utilisons simplementerror_get_last
pour obtenir le texte de la dernière erreur, etfile_get_contents
retourne false en cas d'échec, de sorte qu'un simple "si" peut attraper.@file_get_contents
pour supprimer le rapport d'erreur dans le navigateur.@file_get_contents
pour supprimer l'avertissement et de test de la valeur du résultat à l'aide de=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
pour renvoyer rien dans mon expérienceVous pouvez ajouter un @:
$content = @file_get_contents($site);
Cela permettra de supprimer toute mention d'avertissement - à utiliser avec parcimonie!. Voir Erreur De Commande, Les Opérateurs
Edit: Lorsque vous retirez le "http://" vous n'êtes plus à la recherche d'une page web, mais un fichier sur votre disque appelé "www.google....."
Une alternative consiste à supprimer l'erreur et aussi jeter une exception que vous pouvez rattraper plus tard. Ceci est particulièrement utile si il y a plusieurs appels à file_get_contents() dans votre code, puisque vous n'avez pas besoin de supprimer et de les traiter manuellement. Au lieu de cela, plusieurs appels peuvent être faits à cette fonction dans un seul bloc try/catch.
Voici comment j'ai fait... Pas besoin de bloc try-catch... La meilleure solution est toujours la plus simple... Profitez-en!
$http_response_header
n'est pas mis à jour dans ce cas, puisque pas de réponse HTTP est reçu.$url
est 404 not found, avertissement apparaît toujours.ignore_errors
seulement instruit le HTTP contexte de ne pas interpréter HTTP réponse codes de statut >= 400 comme des erreurs. Alors que marginalement liés, qui ne répond pas à la question de la gestion des erreurs PHP.Voici comment j'ai poignée:
La meilleure chose serait de définir votre propre erreur et les gestionnaires d'exception qui va faire quelque chose d'utile comme la journalisation dans un fichier ou en envoyant critiques.
http://www.php.net/set_error_handler
Vous pouvez utiliser ce script
if ($url === true)...
parce que si vous obtenez une réponse0
ou vide, il soulève une erreur de connexion.Depuis PHP 4 utilisation la fonction error_reporting():
Façon la plus simple de le faire est de simplement ajouter un @ avant file_get_contents,
j'. e.:
quelque chose comme ceci:
Vous devez utiliser file_exists() la fonction avant de l'utiliser file_get_contents().
Avec cette façon, vous éviterez le php warning.
Modifier le fichier php.ini
Ce sera essayer d'obtenir les données, si cela ne fonctionne pas, il capture de l'erreur et de vous permettre de faire tout ce que vous devez à l'intérieur de la prise.
Vous devez également définir la
dans votre
php.ini
pour arrêter de recevoir des avertissements.