あるphpスクリプトから別のphpスクリプトにjson_encodedデータをエコーしています(リクエストはfsockopen / GETによって行われます)。
40 要素の配列をエンコードした場合は問題ありません。41 でまったく同じことを行うと、json 文字列の先頭にいくつかの数字と \r\n が追加されます。
これは、エコーする直前の文字列の先頭です。
{"transactions":[{"transaction_id":"03U191739F337671L",
これは私がデータを送信する方法です:
header('Content-Type: text/plain; charset=utf-8');
error_log(json_encode($transaction_list));
echo json_encode($transaction_list);
要求しているスクリプトでデータを受信したらすぐに、それを error_log に再度出力します。
27fc\r\n{"transactions":[{"transaction_id":"03U191739F337671L",
取得するデータが少ない場合、「27fc\r\n」はありません。
これは私が応答を処理する方法です:
$response="";
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
//Seperate header and content
$separator_position = strpos($response,"\r\n\r\n");
$header_text = substr($response,0,$separator_position);
$body = substr($response,$separator_position+4);
error_log($body);
fclose($fp);
fsockopen リクエストのタイムアウトを試してみましたが、問題ありません。php.ini の max_execution_time と max_input_time と同じことは問題ではありません。タイムアウトで何か内容がカットされているのではないかと思っていたのですが…
41 番目の配列は、前のものとコンテンツの形式に違いはありません。
どうすれば修正できますか?
Linux、Apache (httpd)、および PHP を使用しています。
アップデート
データはチャンクされているようです。応答には、「Transfer-Encoding: chunked」というヘッダーが含まれています。