質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5337閲覧

PHPでJpGraphを使ってグラフが表示できません。

morikawa1

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/04/05 10:42

PHPでJpGraphを使ってグラフが表示できません。どなたか教えていただきませんでしょうか?
phpMyAdminからデータを読み込んでます。
スプリクトは下記の通りです。

<?php session_start(); session_regenerate_id(ture); if(isset($_SESSION['smember_login'])==false) { print'ログインされていません。<br/>'; print'<a href="smember_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['smember_name']; print 'さんログイン中<br/>'; print '<br/>'; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>円グラフ表示</title> </head> <body> <?php include ("jpGraph/jpgraph.php"); include ("jpGraph/jpgraph_pie.php"); $ydata = array(); $a = array(); $year=$_POST['year'];

$date=$year;
/* SQLサーバに接続 /
$conn_id = mysql_connect("※※※.lolipop.jp", "△△△△", "○○○") or die ('Error connecting to mySQL server');
mysql_query('SET NAMES ujis', $conn_id );
/
DBを選択 /
mysql_select_db("LAA0231516-vege", $conn_id);
/
examsテーブルから使用量を取得する /
$sql ="SELECT hiyou,SUM(shishutu) AS G FROM sdat_sales_product WHERE code =".mysql_real_escape_string($_SESSION['smember_code'])." AND shishutu <>'0'AND DATE >='$date-01-01'AND DATE <='$date-12-31' GROUP BY hiyou";
ob_start('Content-type: text/plain; charset=UTF-8');
$result = mysql_query($sql, $conn_id) or die ($sql . ' failed (' . mysql_error() . ')');
echo "$date年支払";
/
データを配列に格納する /
while ($row = mysql_fetch_object($result)) {
$hiyou = $row->hiyou;
$hiyou = mb_convert_encoding($hiyou, 'UTF-8', 'eucJP-win');
array_push($ydata, $row->G);
array_push($a, $hiyou);
}
mysql_free_result($result);
/
SQLサーバから切断 */
mysql_close($conn_id);

/* グラフ作成 */

$graph = new PieGraph(500, 500, "auto");
$graph->legend->SetFont(FF_MINCHO, FS_NORMAL);
$graph->SetFrame(true);
/* X軸項目追加 /
$pieplot = new PiePlot($ydata);
/
plot作成 /
$pieplot->SetLegends($a);
/
グラフ上に描画 /
$graph->Add($pieplot);
/
グラフ表示 */
$graph->Stroke();
?>

このスプリクトでJpGraphで円グラフを表示させたいのですが下記のエラーメッセージが表示されます。

JpGraph Error: HTTP headers have already been sent.
Caused by output from file sheihi_download5.php at line 12.

Explanation:
HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).
Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

For example it is a common mistake to leave a blank line before the opening "<?php".

すみませんがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

理由は同じです。
このファイルでは、画像を表示すること以外やってはいけません。

「ログイン中」の表示をするファイルをindex.php とすると、

<html> <body> <p>○○○○ログイン中</p> <img src="graph.php" /> </body> </html>

として、 graph.php にグラフ出力のコードを書きます。

投稿2015/04/06 00:20

編集2015/04/06 01:40
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morikawa1

2015/04/07 00:10

ご回答、本当にありがとうございます。それで作ってみます。今後ともよろしくお願いします。
guest

0

ベストアンサー

エラーメッセージの通りです。
HTTP headers have already been sent.
は、画像で出力されるはず(Content-type: image/***)なのに、すでにhtmlが出力されているからです。
つまり、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>円グラフ表示</title> </head> <body> を画像(グラフ)出力の前にこれを書いてはいけないということです。

投稿2015/04/05 11:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morikawa1

2015/04/05 20:03

ご回答本当にありがとうございます。 ご指摘いただきました <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>円グラフ表示</title> </head> <body> を除いて表示させると下記の通り表示されます。 逶帛キ昴▽繧医@縺輔s繝ュ繧ー繧、繝ウ荳ュ JpGraph Error: HTTP headers have already been sent. Caused by output from file sheihi_download5.php at line 12. Explanation: HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text). Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser. For example it is a common mistake to leave a blank line before the opening "<?php". 「逶帛キ昴▽繧医@縺輔s繝ュ繧ー繧、繝ウ荳ュ」この部分は文字化けしていまして「○○さんログイン中」と表示させる予定です。 スプリクトは下記部分です。 <?php session_start(); session_regenerate_id(ture); if(isset($_SESSION['smember_login'])==false) { print'ログインされていません。<br/>'; print'<a href="smember_login.html">ログイン画面へ</a>'; exit(); } else { print $_SESSION['smember_name']; print 'さんログイン中<br/>'; print '<br/>'; } ?> 下記部分をコメントアウトすると print $_SESSION['smember_name']; print 'さんログイン中<br/>'; print '<br/>'; 円グラフは表示されます。「○○さんログイン中」を表示させるのにはどうすればいいでしょうか? よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問