ホームページ >バックエンド開発 >PHPの問題 >phpcurlで取得したデータが不完全な場合はどうすればよいですか?

phpcurlで取得したデータが不完全な場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-02-23 18:01:493907ブラウズ

phpカールによって取得された不完全なデータの解決策: 1.「CURLOPT_RETURNTRANSFER=true」を削除します; 2.データソースサーバーのnginxキャッシュ構成を変更します。

phpcurlで取得したデータが不完全な場合はどうすればよいですか?

#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。

phpcurl は不完全なデータを取得します

curl がデータを取得すると、結果として得られる文字列の長さは比較的長くなります。同じ結果であっても、毎回得られるデータは不完全であり、長さも異なります。

HEADER 情報を例外に変更してみてください: しかし、それでも動作しません (解決できる問題は、データ量が大きすぎて結果が空になることです)。

完全なデータを出力するには、

 CURLOPT_RETURNTRANSFER = true

を削除します。

解決策:

データ ソース サーバーの nginx キャッシュ構成を変更します。 [推奨:PHP ビデオチュートリアル ]

fastcgi_buffers は元の 8*128k から 8*1M

以下は https:// から引用segmentfault.com/a /1190000007513677

Nginx のバッファ メカニズムでは、FastCGI サーバーからの応答について、Nginx はそれをメモリにバッファリングしてから、順番にクライアント ブラウザに送信します。バッファのサイズは、fastcgi_buffers と fastcgi_buffer_size の 2 つの値によって制御されます。

たとえば、次の構成:

fastcgi_buffers 8 4K;

fastcgi_buffer_size 4K;

fastcgi_buffers は、nginx を制御して 4K サイズのバッファを最大 8 つ作成しますfastcgi_buffer_size は、Response を処理するときの最初のバッファのサイズであり、前者には含まれません。したがって、作成できる合計最大メモリ バッファ サイズは 84K 4K = 36K です。これらのバッファは、実際の応答サイズに基づいて動的に生成され、一度にすべて作成されるわけではありません。たとえば、8K ページの場合、Nginx は合計 24K のバッファを 2 つ作成します。

Response が 36k 以下の場合、当然ながらすべてのデータがメモリ内で処理されます。 Response が 36k より大きい場合はどうなりますか?それが fastcgi_temp の機能です。追加のデータは一時的にファイルに書き込まれ、このディレクトリの下に配置されます。

36Kb はメモリにバッファされ、残りはファイルに書き込まれます。実際の状況では、Nginx プロセスを実行しているユーザーには fastcgi_temp ディレクトリへの書き込み権限がないため、残りのデータは失われます。

以上がphpcurlで取得したデータが不完全な場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。