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

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

ただいまの
回答率

91.88%

  • PHP

    12495questions

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

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

解決済

回答 2

投稿 2015/04/05 19:42

  • 評価
  • クリップ 1
  • VIEW 1,004

morikawa1

score 3

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".

すみませんがよろしくお願いします。
  • 気になる質問をクリップする

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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 20:03

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2015/04/06 05: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/>';

    円グラフは表示されます。「○○さんログイン中」を表示させるのにはどうすればいいでしょうか?
    よろしくお願いします。

    キャンセル

0

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

「ログイン中」の表示をするファイルをindex.php とすると、
<html>
<body>
<p>○○○○ログイン中</p>
<img src="graph.php" />
</body>
</html>

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

投稿 2015/04/06 09:20

編集 2015/04/06 10:40

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2015/04/07 09:10

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

    キャンセル

teratailには29人のエキスパートがいます

今すぐはじめる

もっと詳しく

関連した質問

同じタグがついた質問を見る

  • PHP

    12495questions

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

閲覧数の多いPHPの質問