ホームページ >バックエンド開発 >PHPチュートリアル >「カール エラー 18 - 未処理の読み取りデータが残っているため転送が閉じられました」というメッセージが表示されるのはなぜですか? どうすれば解決できますか?
curl コマンドライン ツールを使用してリモート サーバーからデータを取得するときに、次のような問題が発生する可能性があります。エラー メッセージ「カール エラー 18 - 未処理の読み取りデータが残っているため転送が終了しました。」このエラーは、応答全体を受信する前に URL からデータを取得しようとした試みが中断され、データの一部または欠落が生じたことを示します。
通常、このエラーは、CURLOPT_RETURNTRANSFER が true に設定されている場合に発生し、 curl_exec 関数は、URL から取得したデータを返す必要があります。ただし、CURLOPT_RETURNTRANSFER を false に設定して無効にすると、取得したデータが直接表示され、エラーが回避されます。
エラーの原因
このエラーは次の原因で発生します。 HTTP 応答でのチャンク エンコーディングの使用。チャンクエンコーディングを使用すると、サーバーは、定義された文字シーケンスで各チャンクが終了する複数のチャンクでデータを送信できます。
すべてのチャンクを受信する前に接続が閉じられると、libcurl は最後に受信したチャンクが不完全であることを認識し、エラー メッセージが生成されます。
問題の解決
この問題に対処するには、主に 2 つの方法があります。
1.チャンク エンコーディングを無効にする:
代わりに、curl コマンドに -0 オプションを追加して、HTTP 1.0 リクエストの発行を試みることができます。 HTTP 1.0 はチャンク エンコーディングを使用しないため、この回避策でエラーが解決される可能性があります。
2.サーバーとネットワーク構成を検査します:
このエラーは、サーバーまたはネットワーク接続に問題があることを示している可能性があります。次の点を確認することをお勧めします:
以上が「カール エラー 18 - 未処理の読み取りデータが残っているため転送が閉じられました」というメッセージが表示されるのはなぜですか? どうすれば解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。