String length output in php-generated response

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux