try/catch ne fonctionne pas en PHP
Pourquoi j'obtiens cette erreur?
Warning: file_get_contents(http://www.example.com) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\xampp\htdocs\test.php on line 22
Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\test.php on line 22
Voici le code:
try {
$sgs = file_get_contents("http://www.example.com");
}
catch (Exception $e) {
echo '123';
}
echo '467';
N'essayez pas\attraper censé continuer l'excecution du code? Ou peut-être il ya une certaine manière différente de le faire?
Parce que file_get_contents() ne lance pas d'exception. Il déclenche une erreur.
can-i-try-catch-a-warning permet de résoudre votre question.
can-i-try-catch-a-warning permet de résoudre votre question.
OriginalL'auteur Victor Marchuk | 2011-07-31
Vous devez vous connecter pour publier un commentaire.
try... catch est plus pour objet null exceptions et manuellement les exceptions lancées. Il n'est pas vraiment le même paradigme que vous pouvez le voir en Java. Les avertissements sont presque trompeur dans le fait qu'ils seront ignorer les blocs try...catch.
Pour supprimer l'avertissement, le préfixe de l'appel de méthode (ou un tableau) avec un
@
.Oh, et il est préférable de vue Fatale Exceptions sont aussi complètement à part insaisissable. Certains d'entre eux peuvent être pris dans certaines circonstances, mais vraiment, vous voulez fixer erreurs fatales, vous ne voulez pas poignée.
Hm, pas si de très bons conseils. L'utilisation de l'erreur suppresseur doit être évitée. Au lieu du journal des mises en garde et assurez-vous que vous n'êtes pas à les obtenir par la validation avec
isset()
ou dans l'autre exemple déterminer que la cible existe et essayer plus d'une fois.Tout ce qui est bon en règle générale, parfois, il est de loin préférable d'utiliser un avertissement-supprimé fonction que pour les avertissements des journaux.
Affaire au point, autant que je sache, la seule façon de vérifier
file_get_contents
via HTTP est d'utiliserfile_exists
(ce qui signifie que vous sont frapper le serveur distant par deux fois) ou cURL, qui est beaucoup plus coûteux en termes de développement, les frais généraux.Dans le premier exemple, il n'y a pas d'excuse :-). Dans le deuxième exemple, si c'est juste un logiciel pour un usage personnel, pas de problème. Sinon vérifier au moins le code de réponse tout d'abord, si vous ne voulez pas curl,
get_headers
fera l'affaire, pas besoin de file_exists et beaucoup moins cher. Après avoir récupérer les en-têtes,substr($headers[0], 9, 3)
sera de retour les trois chiffres du code de réponse.OriginalL'auteur cwallenpoole
catch
ne peut pas attraper une erreur fatale.Il suffit de chercher pour
timeout
dans le manuel pour file_get_contents, il existe plusieurs solutions, en voici une:OriginalL'auteur Karoly Horvath
try..catch
ne fonctionnera que pour les exceptions. Une erreur fatale est pas une exception.Si PHP dépasse son maximum au moment de l'exécution, il n'y a rien que vous pouvez faire. PHP s'arrête tout simplement morts. Il en va de même si PHP est à court de mémoire: Rien que vous pouvez faire pour résoudre le problème après c'est arrivé.
En d'autres termes, les exceptions sont les erreurs que vous pouvez éventuellement récupérer à partir. Les erreurs fatales sont, ainsi, fatale et irrémédiable.
OriginalL'auteur Flambino
En PHP une erreur fatale s'arrête l'exécution du script. Il y a des façons de faire quelque chose lorsque vous exécutez en eux, mais l'idée de faire une erreur fatale est que il ne devrait pas être pris.
OriginalL'auteur karim79
Voici quelques bons détails: http://pc-technic.blogspot.com/2010/10/php-filegetcontents-exception-handling.html
Fondamentalement modifier votre code pour effectuer les opérations suivantes:
Notez l'utilisation du symbole"@". Cela indique à PHP pour ignorer les erreurs soulevées par ce morceau de code. La gestion des exceptions en PHP est très différente de celle de java/c# en raison de la "après le fait" de la nature.
OriginalL'auteur NotMe
Erreurs fatales en PHP ne sont pas pris. Gestion des erreurs et des exceptions sont deux choses différentes. Toutefois, si vous sont enfer plié sur la gestion des erreurs fatales que l'exception, vous aurez besoin de mettre en place votre propre gestionnaire d'erreurs et de diriger toutes les erreurs, faire de votre gestionnaire d'erreur lancer des exceptions et vous pouvez ensuite les attraper.
OriginalL'auteur Kumar
file_get_contents
ne lance pas d'exception (et donc les erreurs et les avertissements qu'il lance ne sont pas catchable). Vous obtenez PHP avertissement et ensuite erreur fatale, ce qui explique pourquoi le script ne continue pas - dépassement de la limite maximale pour le chargement des scripts dansphp.ini
.OriginalL'auteur Ondrej Slinták