Maison >développement back-end >Problème PHP >Que dois-je faire si les données obtenues par php curl sont incomplètes ?
Solution aux données incomplètes obtenues par php curl : 1. Supprimez "CURLOPT_RETURNTRANSFER=true" ; 2. Modifiez la configuration du cache nginx du serveur de source de données.
L'environnement d'exploitation de cet article : système Windows 7, PHP7.1, ordinateur Dell G3.
php curl obtient des données incomplètes
Lorsque curl obtient des données, la longueur de chaîne résultante est relativement grande. Pour un même résultat, les données obtenues à chaque fois sont incomplètes et la longueur est également différente.
Essayez de changer les informations HEADER par except : mais cela ne fonctionne toujours pas (le problème qui peut être résolu est que la quantité de données est trop importante et le résultat est vide).
Supprimez
CURLOPT_RETURNTRANSFER = true
pour imprimer les données complètes
Solution :
Modifier la configuration du cache nginx du serveur de source de données [Recommandé :Tutoriel vidéo PHP]
fastcgi_buffers a été modifié de 8*128k d'origine à 8*1M
Ce qui suit est extrait de https :/ /segmentfault.com/a /1190000007513677
Mécanisme de tampon de Nginx Pour la réponse du serveur FastCGI, Nginx la met en mémoire tampon, puis l'envoie à son tour au navigateur client. La taille du tampon est contrôlée par les deux valeurs fastcgi_buffers et fastcgi_buffer_size.
Par exemple, la configuration suivante :
fastcgi_buffers 8 4K ;
fastcgi_buffer_size 4K
fastcgi_buffers contrôle nginx pour créer jusqu'à 8 tampons de taille 4K ; , et fastcgi_buffer_size est la taille du premier tampon lors du traitement de la réponse, qui n'est pas inclus dans le premier. Ainsi, la taille totale maximale de la mémoire tampon pouvant être créée est de 84 Ko + 4 Ko = 36 Ko. Ces tampons sont générés dynamiquement en fonction de la taille réelle de la réponse et ne sont pas créés en même temps. Par exemple, pour une page de 8 Ko, Nginx créera un total de 2 buffers de 24 Ko.
Lorsque la Réponse est inférieure ou égale à 36k, toutes les données seront bien entendu traitées en mémoire. Que se passe-t-il si la réponse est supérieure à 36 Ko ? C'est ce que fait fastcgi_temp. Les données supplémentaires seront temporairement écrites dans le fichier et placées dans ce répertoire.
36 Ko sont mis en mémoire tampon et le reste sera écrit dans le fichier. La situation réelle est que l'utilisateur exécutant Nginx Process ne dispose pas d'autorisations d'écriture sur le répertoire fastcgi_temp, les données restantes sont donc perdues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!