РЕДАКТИРОВАТЬ: Какую версию PHP / Apache / LightHTTP вы используете?Как и раньше эта ошибка в PHP, но, похоже, она исчезла с 5.2.13 и 5.3.2.
Если приведенная выше ссылка не помогает, я бы хотелточно знаете, что видит PHP, вы можете поместить это в свой API и опубликовать результаты?(конечно, отредактировано).
$input = file_get_contents('php://input');
$stdin = file_get_contents('php://stdin');
print "FILES: ";
print_r($_FILES);
print("<br>POST: ");
print_r($_POST);
print("<br>input: ".$input);
print("<br>stdin: ".$stdin);
die;
Таким образом, мы можем видеть то, что видит PHP, и если оно НЕ декодирует фрагментированное кодирование, то мы МОЖЕМ его вручную декодировать.
End EDIT.(оставляя ниже, если кто-то найдет это полезным)
Я предполагаю, что это продолжение вашего предыдущего вопроса.И я предполагаю, что вы читаете поток из PHP?
Я написал это несколько лет назад, он читает из кодированного потока, и вы можете затем делать все, что захотите с выводом.Если это большой файл, не читайте его в строку, а пишите в файл.
<?php
define('CRLF', "\r\n");
define('BUFFER_LENGTH', 8192);
$headers = '';
$body = '';
$length = 0;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
// get headers FIRST
do
{
// use fgets() not fread(), fgets stops reading at first newline
// or buffer which ever one is reached first
$data = fgets($fp, BUFFER_LENGTH);
// a sincle CRLF indicates end of headers
if ($data === false || $data == CRLF || feof($fp)) {
// break BEFORE OUTPUT
break;
}
$headers .= $data;
}
while (true);
// end of headers
// read from chunked stream
// loop though the stream
do
{
// NOTE: for chunked encoding to work properly make sure
// there is NOTHING (besides newlines) before the first hexlength
// get the line which has the length of this chunk (use fgets here)
$line = fgets($fp, BUFFER_LENGTH);
// if it's only a newline this normally means it's read
// the total amount of data requested minus the newline
// continue to next loop to make sure we're done
if ($line == CRLF) {
continue;
}
// the length of the block is sent in hex decode it then loop through
// that much data get the length
// NOTE: hexdec() ignores all non hexadecimal chars it finds
$length = hexdec($line);
if (!is_int($length)) {
trigger_error('Most likely not chunked encoding', E_USER_ERROR);
}
// zero is sent when at the end of the chunks
// or the end of the stream or error
if ($line === false || $length < 1 || feof($fp)) {
// break out of the streams loop
break;
}
// loop though the chunk
do
{
// read $length amount of data
// (use fread here)
$data = fread($fp, $length);
// remove the amount received from the total length on the next loop
// it'll attempt to read that much less data
$length -= strlen($data);
// PRINT out directly
#print $data;
#flush();
// you could also save it directly to a file here
// store in string for later use
$body .= $data;
// zero or less or end of connection break
if ($length <= 0 || feof($fp))
{
// break out of the chunk loop
break;
}
}
while (true);
// end of chunk loop
}
while (true);
// end of stream loop
// $body and $headers should contain your stream data
?>