Kann keinen großen String-Block ohne Break-Zeilen ausgeben (nginx + php)

8

Ich versuche, einen großen JSON-Block (100k) an den Browser zu drucken, aber der Server schlägt ohne Fehler fehl.

Zum Beispiel:

echo 'var config = ' . json_encode( $config ) . ';' . PHP_EOL;

Ich habe festgestellt, dass es OK ist, wenn ich ein kleines Stück sende. Ich habe festgestellt, dass, wenn ich Zeilenumbrüche in die JSON-Zeichenfolge einfügen, ist es OK, auch wenn die Zeichenfolge 400k ist.

Zum Beispiel:

$config_json = json_encode( $config ); $config_json = str_replace( '},', '},' . PHP_EOL, $config_json ); echo 'var config = ' . $config_json . ';' . PHP_EOL;

Aber die Bruchkanten brechen mein JSON.

Also, wenn es eine Puffereinstellung ist, warum hilft PHP_EOL ?

Ich habe auch versucht, das JSON wie hier in Stücke zu spalten: Ссылка , aber ohne Erfolg, nur die Bruchkanten helfen ich.

    
Mati Horovitz 03.04.2017, 07:56
quelle

4 Antworten

2
___ answer43372196 ___

komprimiere vom Server per PHP

%Vor%

dekomprimiere im Client mit javascript:

Schließen Sie diese Bibliothek ein: js-deflate

Aufblasen + Base64-Decodierung

%Vor%     
___ qstnhdr ___ Kann keinen großen String-Block ohne Break-Zeilen ausgeben (nginx + php) ___ antwort43370795 ___

Wie du schreibst

  

Der Server schlägt ohne Fehler fehl

Ich nehme an, Sie meinen, dass der Server eine Antwort an den Client sendet (Statuscode: 200 - kein Fehler), aber der Antworttext (der Inhalt) ist leer (dies ist der Fehler).

Sie sollten dies überprüfen, denn wenn der Server eine Antwort mit Inhalt sendet, dann ist das Problem nicht bei php, nginx oder buffering.

Sonst (wie in den Kommentaren vorgeschlagen) kann der JSON statt innerhalb eines <script> - </script> -Blocks zwischen <pre> -Tags eingefügt werden und dies könnte das Problem sein (aber ich kann nicht helfen, wenn Sie mehr posten deines Codes).

Ab jetzt nehme ich an, dass die Antwort vom Server leer

ist

Der von Ihnen gepostete Code ist gültig und soll die Ausgabezeichenfolge, die Sie erstellen, korrekt verarbeiten (das liegt weit unter den PHP-Limits).

Sagte, dass es ein seltsames Pufferproblem scheint. Ich schreibe "komisch", denn soweit ich weiß (und ich habe mir auch Zeit genommen, etwas zu recherchieren), sollte die Pufferung nicht durch Zeilenumbrüche beeinflusst werden.

  

Ich habe festgestellt, dass es, wenn ich Zeilenumbrüche in die JSON-Zeichenfolge einfüge, OK ist, selbst wenn die Zeichenfolge 400k ist.

Eine schnelle Problemumgehung zur Lösung Ihres Problems besteht in der Ausgabe eines gültigen JSON mit Zeilenumbrüchen. Sie müssen nur eine Option für json_encode angeben:

%Vor%

JSON_PRETTY_PRINT sagt json_encode , um den JSON so zu formatieren, dass er besser lesbar ist, und fügt Zeilenumbrüche hinzu.

(Beachten Sie, dass diese Option für PHP 5.4.0 und höher verfügbar ist)

Ich hoffe, die obige Lösung funktioniert für Sie.

Wie auch immer, ich rate Ihnen dringend, das Problem weiter zu untersuchen, damit auch der ursprüngliche Code funktioniert.

Zuerst sollten Sie sicherstellen, dass Sie eine aktuelle und stabile Version von nginx und php ausführen.

Dann würde ich die nginx-Konfigurationsdatei, die php-fpm-Konfiguration (wenn Sie php-fpm verwenden) und schließlich die php-Konfiguration überprüfen.

Überprüfen Sie auch die Fehlerprotokolle php, nginx und php-fpm.

    
___ tag123json ___ JSON (JavaScript Object Notation) ist ein Textdatenaustauschformat und sprachunabhängig. Verwenden Sie dieses Tag, wenn dieses Textformat beteiligt ist. VERWENDEN SIE DIESEN TAG NICHT FÜR NATIVE JAVASCRIPT-OBJEKTE ODER JAVASCRIPT OBJECT LITERALS. Bevor Sie eine Frage stellen, wenn Sie glauben, dass Ihre JSON-Datei gültig ist, überprüfen Sie sie bitte in einem JSON-Validator wie JSONLint, damit Ihre Frage beantwortet wird, bevor Sie sie stellen. ___ qstntxt ___

Ich versuche, einen großen JSON-Block (100k) an den Browser zu drucken, aber der Server schlägt ohne Fehler fehl.

Zum Beispiel:

%code%

Ich habe festgestellt, dass es OK ist, wenn ich ein kleines Stück sende. Ich habe festgestellt, dass, wenn ich Zeilenumbrüche in die JSON-Zeichenfolge einfügen, ist es OK, auch wenn die Zeichenfolge 400k ist.

Zum Beispiel:

%code%

Aber die Bruchkanten brechen mein JSON.

Also, wenn es eine Puffereinstellung ist, warum hilft %code% ?

Ich habe auch versucht, das JSON wie hier in Stücke zu spalten: Ссылка , aber ohne Erfolg, nur die Bruchkanten helfen ich.

    
___ tag123nginx ___ Nginx ("engine x") ist ein Webserver, Reverse Proxy, TCP-Stream-Proxy und Mail-Proxy, der unter einer BSD-ähnlichen Lizenz veröffentlicht wird. ___ antwort43335541 ___

Versuchen Sie, php heredoc für das Echo zu verwenden Ссылка

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer43378368 ___

Falls Sie nicht %code% version & gt; 5.4.0 auf Ihrem Server installiert ist, könnte eine schnelle Abhilfe in etwa so aussehen. Das folgende Snippet funktioniert für ein Testarray. Der anfängliche Test wurde mit einem Array von 250 kB durchgeführt. Da ich das eigentliche Test-Array hier nicht veröffentlichen kann, ist ein Test Link mit einem kleineren Beispiel. Es ist jedoch das Ergebnis von %code% .

%Vor%     
___
Paolo 12.04.2017 13:22
quelle
0
___ answer43372196 ___

komprimiere vom Server per PHP

%Vor%

dekomprimiere im Client mit javascript:

Schließen Sie diese Bibliothek ein: js-deflate

Aufblasen + Base64-Decodierung

%Vor%     
___ qstnhdr ___ Kann keinen großen String-Block ohne Break-Zeilen ausgeben (nginx + php) ___ antwort43370795 ___

Wie du schreibst

  

Der Server schlägt ohne Fehler fehl

Ich nehme an, Sie meinen, dass der Server eine Antwort an den Client sendet (Statuscode: 200 - kein Fehler), aber der Antworttext (der Inhalt) ist leer (dies ist der Fehler).

Sie sollten dies überprüfen, denn wenn der Server eine Antwort mit Inhalt sendet, dann ist das Problem nicht bei php, nginx oder buffering.

Sonst (wie in den Kommentaren vorgeschlagen) kann der JSON statt innerhalb eines %code% - %code% -Blocks zwischen %code% -Tags eingefügt werden und dies könnte das Problem sein (aber ich kann nicht helfen, wenn Sie mehr posten deines Codes).

Ab jetzt nehme ich an, dass die Antwort vom Server leer

ist

Der von Ihnen gepostete Code ist gültig und soll die Ausgabezeichenfolge, die Sie erstellen, korrekt verarbeiten (das liegt weit unter den PHP-Limits).

Sagte, dass es ein seltsames Pufferproblem scheint. Ich schreibe "komisch", denn soweit ich weiß (und ich habe mir auch Zeit genommen, etwas zu recherchieren), sollte die Pufferung nicht durch Zeilenumbrüche beeinflusst werden.

  

Ich habe festgestellt, dass es, wenn ich Zeilenumbrüche in die JSON-Zeichenfolge einfüge, OK ist, selbst wenn die Zeichenfolge 400k ist.

Eine schnelle Problemumgehung zur Lösung Ihres Problems besteht in der Ausgabe eines gültigen JSON mit Zeilenumbrüchen. Sie müssen nur eine Option für %code% angeben:

%Vor%

%code% sagt %code% , um den JSON so zu formatieren, dass er besser lesbar ist, und fügt Zeilenumbrüche hinzu.

(Beachten Sie, dass diese Option für PHP 5.4.0 und höher verfügbar ist)

Ich hoffe, die obige Lösung funktioniert für Sie.

Wie auch immer, ich rate Ihnen dringend, das Problem weiter zu untersuchen, damit auch der ursprüngliche Code funktioniert.

Zuerst sollten Sie sicherstellen, dass Sie eine aktuelle und stabile Version von nginx und php ausführen.

Dann würde ich die nginx-Konfigurationsdatei, die php-fpm-Konfiguration (wenn Sie php-fpm verwenden) und schließlich die php-Konfiguration überprüfen.

Überprüfen Sie auch die Fehlerprotokolle php, nginx und php-fpm.

    
___ tag123json ___ JSON (JavaScript Object Notation) ist ein Textdatenaustauschformat und sprachunabhängig. Verwenden Sie dieses Tag, wenn dieses Textformat beteiligt ist. VERWENDEN SIE DIESEN TAG NICHT FÜR NATIVE JAVASCRIPT-OBJEKTE ODER JAVASCRIPT OBJECT LITERALS. Bevor Sie eine Frage stellen, wenn Sie glauben, dass Ihre JSON-Datei gültig ist, überprüfen Sie sie bitte in einem JSON-Validator wie JSONLint, damit Ihre Frage beantwortet wird, bevor Sie sie stellen. ___ qstntxt ___

Ich versuche, einen großen JSON-Block (100k) an den Browser zu drucken, aber der Server schlägt ohne Fehler fehl.

Zum Beispiel:

%code%

Ich habe festgestellt, dass es OK ist, wenn ich ein kleines Stück sende. Ich habe festgestellt, dass, wenn ich Zeilenumbrüche in die JSON-Zeichenfolge einfügen, ist es OK, auch wenn die Zeichenfolge 400k ist.

Zum Beispiel:

%code%

Aber die Bruchkanten brechen mein JSON.

Also, wenn es eine Puffereinstellung ist, warum hilft %code% ?

Ich habe auch versucht, das JSON wie hier in Stücke zu spalten: Ссылка , aber ohne Erfolg, nur die Bruchkanten helfen ich.

    
___ tag123nginx ___ Nginx ("engine x") ist ein Webserver, Reverse Proxy, TCP-Stream-Proxy und Mail-Proxy, der unter einer BSD-ähnlichen Lizenz veröffentlicht wird. ___ antwort43335541 ___

Versuchen Sie, php heredoc für das Echo zu verwenden Ссылка

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer43378368 ___

Falls Sie nicht %code% version & gt; 5.4.0 auf Ihrem Server installiert ist, könnte eine schnelle Abhilfe in etwa so aussehen. Das folgende Snippet funktioniert für ein Testarray. Der anfängliche Test wurde mit einem Array von 250 kB durchgeführt. Da ich das eigentliche Test-Array hier nicht veröffentlichen kann, ist ein Test Link mit einem kleineren Beispiel. Es ist jedoch das Ergebnis von %code% .

%Vor%     
___
Sandeep Kothari 11.04.2017 01:58
quelle
0

komprimiere vom Server per PHP

%Vor%

dekomprimiere im Client mit javascript:

Schließen Sie diese Bibliothek ein: js-deflate

Aufblasen + Base64-Decodierung

%Vor%     
M.Eskandari 12.04.2017 14:18
quelle
0

Falls Sie nicht PHP version & gt; 5.4.0 auf Ihrem Server installiert ist, könnte eine schnelle Abhilfe in etwa so aussehen. Das folgende Snippet funktioniert für ein Testarray. Der anfängliche Test wurde mit einem Array von 250 kB durchgeführt. Da ich das eigentliche Test-Array hier nicht veröffentlichen kann, ist ein Test Link mit einem kleineren Beispiel. Es ist jedoch das Ergebnis von JSON_PRETTY_PRINT .

%Vor%     
Peter Darmis 12.04.2017 19:47
quelle

Tags und Links