RE: [PHP] String length output in php-generated response

2011-02-07 Thread Ford, Mike
 -Original Message-
 From: Florin Jurcovici [mailto:florin.jurcov...@gmail.com]
 Sent: 06 February 2011 15:57

 
 I'm trying to build myself a small JSON-RPC server using PHP.
 
 Using wireshark, here's the conversation:
 
 Request:

[...snip...]

 Response:
   HTTP/1.1 200 OK
   Date: Sun, 06 Feb 2011 15:04:08 GMT
   Server: Apache/2.2.14 (Ubuntu)
   Accept-Ranges: bytes
   X-Powered-By: PHP/5.3.2-1ubuntu4.7
   Keep-Alive: timeout=15, max=100
   Connection: Keep-Alive
   Transfer-Encoding: chunked
   Content-Type: application/json; charset=UTF-8
 
   6f
   {id:2,result:{service:test.service,method:method,
 id:2,params:[{code:client}]},error:null}
   0

That's nothing to do with PHP -- it's http chunked encoding, as
indicated by the Transfer-Encoding: chunked header, and is handled
by Apache and your browser. It's totally expected and totally
harmless. Read about it here:

   http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6

Cheers!

Mike

 -- 
Mike Ford,
Electronic Information Developer, Libraries and Learning Innovation,  
Leeds Metropolitan University, C507 City Campus, 
Woodhouse Lane, LEEDS,  LS1 3HE,  United Kingdom 
Email: m.f...@leedsmet.ac.uk 
Tel: +44 113 812 4730




To view the terms under which this email is distributed, please go to 
http://disclaimer.leedsmet.ac.uk/email.htm

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] String length output in php-generated response

2011-02-07 Thread Richard Quadling
On 6 February 2011 15:57, Florin Jurcovici florin.jurcov...@gmail.com wrote:
  said it, Bush junior proved it

Is this actually part of the output?



-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] String length output in php-generated response

2011-02-06 Thread Florin Jurcovici
Hi.

I'm trying to build myself a small JSON-RPC server using PHP.

Using wireshark, here's the conversation:

Request:
POST /.../service.php?nocache=1297004648751 HTTP/1.1
User-Agent: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 
Version/11.01
Host: localhost
Accept: text/html, application/xml;q=0.9, application/xhtml+xml,
image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en-US,en;q=0.9
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://localhost/ssd/php/testrpc/build/
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 80
Content-Type: application/json
Pragma: no-cache
Cache-Control: no-cache
X-Qooxdoo-Response-Type: application/json
Content-Transfer-Encoding: binary


{service:test.service,method:method,id:1,params:[{code:client}]}
 said it, Bush junior proved it
Response:
HTTP/1.1 200 OK
Date: Sun, 06 Feb 2011 15:04:08 GMT
Server: Apache/2.2.14 (Ubuntu)
Accept-Ranges: bytes
X-Powered-By: PHP/5.3.2-1ubuntu4.7
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

6f

{id:2,result:{service:test.service,method:method,id:2,params:[{code:client}]},error:null}
0

The code to handle the request is:

?php

$request = json_decode($GLOBALS['HTTP_RAW_POST_DATA']);

$response = (object) array(
id = $request-id,
result = $request,
error = null
);

header(Content-Type: application/json; charset=UTF-8, true);
print json_encode($response);

?

The 6f above is the length of the output in hex (I tried with
various lengths of the string, it is always correct), the 0 at the end
is probably some C-like string termination mark.

Now, it seems the client (some JavaScript running in Firefox) has no
problem decoding the answer, in spite of the hex length placed at the
beginning. However, I can't rely on browsers playing nicely with
incorrect JSON, so I would very much like to generate an output
without the length of the response written as hex at the beginning,
and without the terminating 0. What am I doing wrong? Why does the
length of the string get written?

I tried concatenation of an empty string at the beginning and at the
end, supposing that for some reason json_encode() doesn't produce a
plain string, and hoping that concatenating it to a proper string
would produce a plain string, but it didn't help either.

Before posting to the list, I tried searching for the problem on the
web, and also experimented by outputting plain, hand-written strings.
It didn't really help. Maybe it's a setup problem? My problem is, php
is absolutely new to me, so I don't even know how to start diagnosing
the problem (I started experimenting just a few hours ago).

To decide whether it's a setup problem, here's the development platform:
OS: Kubuntu 10.04.1 LTS
Apache: Apache/2.2.14 (Ubuntu)
PHP: 1.0.5-dev
json version: 1.2.1

I don't think the browser is relevant, since it behaves the same in
Opera and Firefox, and it doesn't happen in the browser, it happens on
the server, since that's what wireshark shows.

TIA,

flj

-- 
In politics, stupidity is not a handicap. (Napoleon)

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php