2017-09-22 3 views
-1

Sur le site de mon entreprise j'utilise file_get_contents() à divers endroits pour récupérer une page complète (du même site) que je mets ensuite dans un fichier PDF que je télécharge à l'utilisateur. Pour une raison mystérieuse, parfois cela ne fonctionne pas. J'ai essayé de spécifier à la fois un chemin absolu et une URL, avec les mêmes résultats. De temps en temps il ne retourne rien. Pas même une erreur de retour. Comme cela semble aléatoire, intermittent et occasionnel, je me demande s'il s'agit d'une question sensible au timing. Que pourrait-il se passer? Comment pourrais-je savoir ce qui se passe? C'est seulement occasionnel mais assez fréquent que les utilisateurs se plaignent. L'appel est à proximité d'un appel ultérieur à mail() pour envoyer le PDF, si cela peut être un facteur.PHP file_get_contents() échoue par intermittence et parfois

+0

utilisez-vous un urI absolu relatif? – rtfm

+0

utiliser 'curl' .... –

+3

Qu'est-ce qui échoue et ça ne marche pas? –

Répondre

0

À titre de suggestion, exécutez file_exists avant d'essayer de lire le contenu du fichier, juste pour vous assurer que le fichier existe. Deuxièmement, file_get_contents retournera faux dans le cas d'un échec, je voudrais également vérifier cela aussi. En dernier contrôle, il est tout à fait possible que le fichier que vous essayez de lire soit vide. Puisque file_get_contents renvoie une chaîne (s'il y a du contenu), vous pouvez effectuer une vérification strlen pour vous assurer que le fichier contient bel et bien.

Si file_get_contents renvoie null, cela indique que le fichier est vide et qu'il y a peut-être un problème sous-jacent quelque part dans votre application. Si le fichier que vous essayez de lire est créé par votre application, revisitez le code qui crée le fichier pour vous assurer que les fichiers sont en fait remplis avec le contenu avant d'écrire.

+0

Je viens de réaliser que j'utilisais un chemin de fichier absolu et pourtant le fichier semblait être traité comme s'il était une page Web, c'est-à-dire que le code PHP a été exécuté. Comment est-ce possible? Est-ce qu'un chemin absolu pour un fichier est analysé comme une page Web avec file_get_contents? J'ai mis une URL à la place, ce qui n'a pas fonctionné auparavant, mais jusqu'à présent cela semble fonctionner. Très curieux que cela fonctionne bien 95% du temps, mais l'autre 5% du temps il ne renvoie rien silencieusement. – Mxsmanic

+0

file_get_contents retournera littéralement le contenu de tout fichier qui lui est donné. Vous pouvez également passer une URL à une page Web; dans ce cas, il renvoie la source Web compilée de la page Web, similaire si vous affichez la source d'une page Web dans un navigateur Web. Si vous voulez renvoyer un fichier, peut-être un fichier PDF? Ensuite, vous devez pointer file_get_contents vers le chemin absolu/relatif du fichier. Pour que je puisse vous aider, un extrait de code sera d'une grande aide – GNewton