its me again with a php problem 🙂
Following is part of my PHP script which is rendering JPEG images.
...
$tf=$requested_file;
$image_type="jpeg";
header("Content-type: image/${image_type}");
$CMD="\$image=imagecreatefrom${image_type}('$tf'); image${image_type}(\$image);";
eval($CMD);
exit;
...
There is no syntactical error, because above code is working fine for small images, but for large images, it gives:
Error 321 (net::ERR_INVALID_CHUNKED_ENCODING): Unknown error. in the browser.
To be sure, I created two images using imagemagick from same source image – one resized to 10% of original and other 90%.
http://mostpopularsports.net/images/misc/ttt10.jpg works
http://mostpopularsports.net/images/misc/ttt90.jpg gives Error 301 in the browser.
There is a related question with solution posted by OP here Error writing content through Apache but I cannot understand how to make the fix. Can someome help me with it?
I have looked at the headers in Chrome. For the first request, everything is fine. For the second request – the request headers are all garbled.
Both images are jpeg (as they are created from imagemagick. But still to be sure I checked):
misc/ttt10.jpg: JPEG image data, JFIF standard 1.01
misc/ttt90.jpg: JPEG image data, JFIF standard 1.01
Finally, the way I fixed is, remove the Transfer-Encoding: chunked header from the response. [This header was sent by apache only when the data was large enough]. (I had an internal proxy, so did it in the proxy script – otherwise one may need to do it in apache settings).
There were some good answers and I have selected the one that helped me solve the problem best.
thanks
JP
You should debug the exact server response using netcat. But a quick look with
wget --save-headersreveals that the output actually looks ok:Your linked bug-report had an invalid “chunked,chunked” – which isn’t the case for your script. Still the chunked encoding is the problem here, as your Chrome error message shows.
I think the problem might be PHPs output buffers. The transfer-encoding lacks the final
0\r\nto terminate the HTTP stream.You can try flush(), disabling PHPs output buffer, and also Apaches mod_deflate (which is an extra buffer). I’m clueless as to why PHP keeps the connection open, but it might very well be the specifc combination of eval and exit. Try rewriting your code:
Or if it doesn’t work. Try outputting garbage
echo "0";after the image.