phpカールによって取得された不完全なデータの解決策: 1.「CURLOPT_RETURNTRANSFER=true」を削除します; 2.データソースサーバーのnginxキャッシュ構成を変更します。
#この記事の動作環境: 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 サイトの他の関連記事を参照してください。