PHP json_encode在json字符串的开头添加一些数字(十六进制?)

PHP json_encode在json字符串的开头添加一些数字(十六进制?),php,json,fsockopen,Php,Json,Fsockopen,我将json_编码的数据从一个php脚本回显到另一个php脚本(请求由fsockopen/GET发出) 对一个包含40个元素的数组进行编码时,没有问题。当对41执行完全相同的操作时,一些数字和\r\n会添加到json字符串的开头 这是字符串的开头,就在我回显它之前: {"transactions":[{"transaction_id":"03U191739F337671L", 以下是我发送数据的方式: header('Content-Type: text/plain; charset=utf-

我将json_编码的数据从一个php脚本回显到另一个php脚本(请求由fsockopen/GET发出)

对一个包含40个元素的数组进行编码时,没有问题。当对41执行完全相同的操作时,一些数字和\r\n会添加到json字符串的开头

这是字符串的开头,就在我回显它之前:

{"transactions":[{"transaction_id":"03U191739F337671L",
以下是我发送数据的方式:

header('Content-Type: text/plain; charset=utf-8');
error_log(json_encode($transaction_list));
echo json_encode($transaction_list);
收到请求脚本中的数据后,我会将其再次打印到错误日志:

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

更新


数据似乎是分块的。响应中包含以下标题:“传输编码:分块”。

基于@Salmans使用file\u get\u内容的思想,这是一个有效的解决方案。这使用POST发送数据(GET似乎不起作用,我认为必须自己将该查询字符串附加到URL):


闻起来有点像什么东西。那个JSON字符串是10236个八位字节长吗?您或输出流中的其他人是否调用了分块输出?可能没有关系,但为什么发送内容类型错误的JSON?JSON的内容类型是
application/JSON
,而不是
text/plain
@Charles,我不是有意调用某些东西。如何调用分块输出?如果大小大于预定义的长度,它是否可以自动开始分块?我试图在GET请求中找到最大响应大小,但只能找到关于帖子大小的信息。。。发送前json_长度的大小为8400(这是多少个八位字节?)。我似乎是一个令人恼火的偶数…@Nicsoft,一个八位字节是8位,或一个字节。对不起,错了。如果使用,可能会得到分块传输编码。如果使用
file\u get\u contents
读取文件,会得到什么?
$postdata = http_build_query(         
   array('customer_id' => $customer_id)
);

$opts = array('http' =>
   array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $postdata
   )
);

$context  = stream_context_create($opts);  
$content = file_get_contents($my_url, false, $context);
return $content;