13

大量の XML を出力する共有ホスティング環境で実行時間の長いスクリプトがあります。

ときどき (ときどきのみ) ランダムな GZIP ヘッダーが出力に表示され、出力が終了します。

例えば

0000000: 3c44 4553 435f 4c4f 4e47 3e3c 215b 4344  <DESC_LONG><![CD
0000010: 4154 415b 1fc2 8b08 0000 0000 0000 03c3  ATA[............
0000020: b3c3 8b57 c388 c38c 2b28 2d51 48c3 8bc3  ...W....+(-QH...
0000030: 8c49 5528 2e48 4dc3 8e4c c38b 4c4d c391  .IU(.HM..L..LM..
0000040: c3a3 0200 c291 4464 c383 1900 0000 0d0a  ......Dd........

また

0000000: 3c2f 5052 4f44 5543 543e 0d0a 1fc2 8b08  </PRODUCT>......
0000010: 0000 0000 0000 03c3 b3c3 8b57 c388 c38c  ...........W....
0000020: 2b28 2d51 48c3 8bc3 8c49 5528 2e48 4dc3  +(-QH....IU(.HM.
0000030: 8e4c c38b 4c4d c391 c3a3 0200 c291 4464  .L..LM........Dd
0000040: c383 1900 0000 0d0a                      ........

また

0000000: 3c4d 4544 4941 5f55 524c 3e2f 696d 6167  <MEDIA_URL>/imag
0000010: 6573 2f69 6d70 6f72 7465 642f 7374 6f63  es/imported/stoc
0000020: 6b5f 7072 6f64 3235 3339 365f 696d 6167  k_prod25396_imag
0000030: 655f 3531 3737 3439 3436 302e 6a70 673c  e_517749460.jpg<
0000040: 2f4d 4544 4941 5f55 1fc2 8b08 0000 0000  /MEDIA_U........
0000050: 0000 03c3 b3c3 8b57 c388 c38c 2b28 2d51  .......W....+(-Q
0000060: 48c3 8bc3 8c49 5528 2e48 4dc3 8e4c c38b  H....IU(.HM..L..
0000070: 4c4d c391 c3a3 0200 c291 4464 c383 1900  LM........Dd....
0000080: 0000 0d0a                                ....

GZIP への切り替えは、バイト カウントの特定の時点ではヒットしないようです。1MB のデータの後または 15MB の後になる可能性があります。

対応する行でコンパイルされたブレード テンプレートは次のとおりです。

<DESC_LONG><![CDATA[<?php echo $product->display_name; ?>]]></DESC_LONG>

-

</PRICES>
</PRODUCT>
<?php foreach($product->models()->get() as $model): ?>

-

<MEDIA_URL>/images/imported/<?php echo $picture->local_name; ?></MEDIA_URL>

私は機知に富んでいます、私は次のことを試しました:

  • サーバーで gzip を無効にします。
  • while(ob_get_level()){ ob_end_clean(); }スクリプトを実行する前に実行する
  • 、およびそのさまざまな順列.htaccessを試しました。SetEnv no-gzip 1SetEnv no-gzip dont-vary

他のページにアクセスすると、gzip エンコーディングやヘッダーが表示されないので、これは出力サイズまたは出力バッファーの問題だと思います。

4

3 に答える 3

1

gziping は、メインの xml 本文を返すサーバー出力とは関係ありません。そうしないと、xml 全体が圧縮されます。

これらのメソッドがアイテムを取得するソースが gzip をサポートするように設定されており、適切に尋ねられないため、これらのメソッドは GZIP を返すことがあります。

$product->display_name
$product->models()->get()
$picture->local_name

これらの中を見てください。- ヘッダーが設定されているすべての場所の Web 呼び出しを確認します。- データベース接続の圧縮があれば一時的に無効にします。

バイナリ データが返される可能性があるすべての場所に CDATA タグを追加して、メインの xml 本文の構築が終了しないようにします。ビン データを含む xml を待ち、ビン データを保存し、解凍して中身を確認します。:-)

于 2014-02-11T11:42:54.327 に答える