Lösung für unvollständige Daten, die von PHP Curl erhalten wurden: 1. Entfernen Sie „CURLOPT_RETURNTRANSFER=true“; 2. Ändern Sie die Nginx-Cache-Konfiguration des Datenquellenservers.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP7.1, Dell G3-Computer.
PHP Curl erhält unvollständige Daten
Wenn Curl Daten erhält, ist die resultierende Zeichenfolgenlänge relativ groß. Für das gleiche Ergebnis sind die jedes Mal erhaltenen Daten unvollständig und auch die Länge ist unterschiedlich.
Versuchen Sie, die HEADER-Informationen in „außer:“ zu ändern, aber es funktioniert immer noch nicht (das Problem, das gelöst werden kann, besteht darin, dass die Datenmenge zu groß ist und das Ergebnis leer ist).
Entfernen Sie
CURLOPT_RETURNTRANSFER = true
, um die vollständigen Daten auszudrucken
Lösung:
Ändern Sie die Nginx-Cache-Konfiguration des Datenquellenservers [Empfohlen: PHP-Video-Tutorial]
fastcgi_buffers vom Original 8*128k auf geändert 8* 1M
Das Folgende stammt aus https://segmentfault.com/a/1190000007513677
Der Puffermechanismus von Nginx puffert die Antwort vom FastCGI-Server im Speicher und sendet sie dann der Reihe nach an den Client-Browser . Die Größe des Puffers wird durch die beiden Werte fastcgi_buffers und fastcgi_buffer_size gesteuert.
Zum Beispiel die folgende Konfiguration:
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
fastcgi_buffers steuert Nginx, um bis zu 8 Puffer mit einer Größe von 4K zu erstellen, und fastcgi_buffer_size ist die Größe des ersten Puffers bei der Verarbeitung der Antwort, nicht enthalten im ersteren. Die maximale Speicherpuffergröße, die insgesamt erstellt werden kann, beträgt also 84 KB + 4 KB = 36 KB. Diese Puffer werden dynamisch basierend auf der tatsächlichen Antwortgröße generiert und nicht alle auf einmal erstellt. Für eine 8-KB-Seite erstellt Nginx beispielsweise insgesamt zwei Puffer mit 24 KB.
Wenn die Antwort kleiner oder gleich 36 KB ist, werden alle Daten natürlich im Speicher verarbeitet. Was passiert, wenn die Antwort größer als 36 KB ist? Das ist es, was fastcgi_temp tut. Die zusätzlichen Daten werden vorübergehend in die Datei geschrieben und in diesem Verzeichnis abgelegt.
36 KB werden im Speicher gepuffert, der Rest wird in die Datei geschrieben. Die tatsächliche Situation ist, dass der Benutzer, der den Nginx-Prozess ausführt, keine Schreibberechtigung für das Verzeichnis fastcgi_temp hat, sodass die verbleibenden Daten verloren gehen.
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn die von PHP Curl erhaltenen Daten unvollständig sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!