On Jan 12, 2015, at 6:10 PM, Kevin Ingwersen wrote:

> I had forked a project that promised to let me run PHP scripts trough fcgi 
> and did slight modifications to it so it would work properly with the Yii 
> framework. But now I just tried to print an image verbatim - changing the 
> content type and and adding Content-length to the headers. What I had to 
> learn was, that my output was off. I compared it to running the same script 
> from NGINX and compared the output. It appears that the first bunch of bites 
> are off entirely. x.x
> 
> Since I am not quite a FCGI-nut, I can not seem to fix this.
> 
> My fork: https://github.com/IngwiePhoenix/connect-yii
> 
> And here is my test:
> 
> [email protected] ~ $ cat public_html/blah.php
> <?php
> $file = "/Users/Ingwie/Downloads/xynu_icon.jpg";
> header("Content-type: image/jpeg; charset=binary");
> header("Content-length: ".filesize($file));
> @readfile($file);
> [email protected] ~ $ fstat Downloads/xynu_icon.jpg
> -bash: fstat: command not found
> [email protected] ~ $ stat Downloads/xynu_icon.jpg
> 16777221 15545045 -rw-r--r-- 1 Ingwie staff 0 250937 "Jan 13 01:02:42 2015" 
> "Dec 29 18:59:25 2014" "Dec 29 18:59:25 2014" "Dec 29 18:58:54 2014" 4096 496 
> 0 Downloads/xynu_icon.jpg
> [email protected] ~ $ curl -v http://localhost:8080/blah.php > 
> test.jpeg
> * Hostname was NOT found in DNS cache
> *   Trying 127.0.0.1...
>   % Total    % Received % Xferd  Average Speed   Time    Time     Time  
> Current
>                                  Dload  Upload   Total   Spent    Left  Speed
>   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     
> 0* Connected to localhost (127.0.0.1) port 8080 (#0)
> > GET /blah.php HTTP/1.1
> > User-Agent: curl/7.38.0
> > Host: localhost:8080
> > Accept: */*
> >
> < HTTP/1.1 200 OK
> < X-Powered-By: PHP/5.5.14
> < Content-type: image/jpeg; charset=binary
> < Content-length: 250937
> < X-Response-Time: 1.924ms
> < Date: Tue, 13 Jan 2015 00:08:59 GMT
> < Connection: keep-alive
> <
> { [data not shown]
> 100  245k  100  245k    0     0  11.3M      0 --:--:-- --:--:-- --:--:-- 12.5M
> * Connection #0 to host localhost left intact
> [email protected] ~ $ stat test.jpeg
> 16777221 17084144 -rw-r--r-- 1 Ingwie staff 0 250937 "Jan 13 01:09:00 2015" 
> "Jan 13 01:08:59 2015" "Jan 13 01:08:59 2015" "Jan 13 00:52:55 2015" 4096 496 
> 0 test.jpeg
> [email protected] ~ $ cmp test.jpeg Downloads/xynu_icon.jpg
> test.jpeg Downloads/xynu_icon.jpg differ: char 1, line 1
> [email protected] ~ $ hexdump -C -n 16 Downloads/xynu_icon.jpg
> 00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 01 01 01 2c  |......JFIF.....,|
> 00000010
> [email protected] ~ $ hexdump -C -n 16 test.jpeg
> 00000000  ef bf bd ef bf bd ef bf  bd ef bf bd 00 10 4a 46  |..............JF|
> 00000010
> 
> 
> As you can see at the hexdumps at the end, something is not right with the 
> output.
> 
> Is there anyone who could help me solve this?

"EF BF BD" is the UTF-8 representation of U+FFFD, the Unicode replacement 
character. 

http://en.http://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character

So it seems that something is assuming that the incoming binary data is 
properly UTF-8 encoded, which it of course isn't, and so it replaces each of 
the bytes that are not valid UTF-8 characters (in your example, "FF", "D8", 
"FF", "E0") with the UTF-8 representation of the replacement character.


-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/8FE567D1-5BFA-4EE8-8CBD-7FEA3F45A44C%40ryandesign.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to