Reputation: 3271
I am using the php post request example given on http://code.google.com/apis/chart/docs/post_requests.html for generating chart.
The code: chartserver-image.php
<?php
// Create some random text-encoded data for a line chart.
header('content-type: image/png');
$url = 'http://chart.apis.google.com/chart';
$chd = 't:';
for ($i = 0; $i < 150; ++$i) {
$data = rand(0, 100000);
$chd .= $data . ',';
}
$chd = substr($chd, 0, -1);
// Add data, chart type, chart size, and scale to params.
$chart = array(
'cht' => 'lc',
'chs' => '600x200',
'chds' => '0,100000',
'chd' => $chd);
// Send the request, and print out the returned bytes.
$context = stream_context_create(
array('http' => array(
'method' => 'POST',
'content' => http_build_query($chart))));
fpassthru(fopen($url, 'r', false, $context));
?>
another_page.html
<img width='600' height='200' src='chartserver-image.php'>
Right now when i access another_page.html, the image doesn't load when i click on view image it shows
The image “http://localhost/demo/chartserver-image.php” cannot be displayed, because it contains errors.
What is the issue i am unable to understand?
Please help me on this
Thanks
Upvotes: 2
Views: 1815
Reputation: 11
This will work Absolutely fine... Some mistakes in the above example i think.. they are solved below.
<?php
// Create some random text-encoded data for a line chart.
header('content-type: image/png');
$url = 'http://chart.apis.google.com/chart';
$chd = 't:';
for ($i = 0; $i < 150; ++$i) {
$data = rand(0, 100000);
$chd .= $data . ',';
}
$chd = substr($chd, 0, -1);
// Add data, chart type, chart size, and scale to params.
$chart = array(
'cht' => 'lc',
'chs' => '600x200',
'chds' => '0,100000',
'chd' => $chd);
$query = http_build_query($chart);
$fullurl = $url."?".$query;
$context = stream_context_create(
array(
'http' => array(
'method' => 'GET',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
"Content-length: 0",
)
)
);
$ret = fopen($fullurl, 'r', false, $context);
fpassthru($ret);
?>
Upvotes: 1
Reputation: 40145
I had the identical problem, and I split
$context = stream_context_create(
array('http' => array(
'method' => 'POST',
'content' => http_build_query($chart))));
into two statements:
$x = array('http' => array(
'method' => 'POST',
'content' => http_build_query($chart)));
$context = stream_context_create($x);
and that seemed to solve it (please don't ask me why)
Upvotes: 0
Reputation: 3271
Replacing 'content' => http_build_query($chart)))); with 'content' => http_build_query($chart,'', '&')))); resolves the issue.
I have added arg separator '&' to http_build_query() which avoid bug if the arg_separator.output parameter is modified in php.ini.
When i checked phpinfo the arg_separator.output was &. That was causing issue so adding '&' to http_build_query() resolves the problem.
Upvotes: 2
Reputation: 5538
This works for me:
<?php
// Create some random text-encoded data for a line chart.
//header('content-type: image/png');
$url = 'http://chart.apis.google.com/chart';
$chd = 't:';
for ($i = 0; $i < 150; ++$i) {
$data = rand(0, 100000);
$chd .= $data . ',';
}
$chd = substr($chd, 0, -1);
// Add data, chart type, chart size, and scale to params.
$chart = array(
'cht' => 'lc',
'chs' => '600x200',
'chds' => '0,100000',
'chd' => $chd);
$query = http_build_query($chart);
$fullurl = $url."?".$query;
$context = stream_context_create(
array(
'http' => array(
'method' => 'GET',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
"Content-length: 0",
'proxy' => 'tcp://X.X.X.X:XXXX'
)
)
);
$ret = fopen(fullurl, 'r', false, $context);
fpassthru($ret);
Upvotes: 0