0

私は pchart を初めて使用し、mysql テーブルからチャートを作成する際に問題 (おそらく見逃したもの) が発生しています。私が望むのは、選択する項目に応じて 1 つの行だけをグラフ化することです。これは1回しか機能しませんでしたが、スクリプトを再度実行しようとするたびに、apache(私はapache2を使用しています)がタイムアウトになり、「top」を使用してサーバーをチェックすると、プロセスapacheは100%のCPU使用率を使用します。グラフが作成されても、CPU 使用率が 100% のままで何もしない場合があります。最後に「autoOutput」メソッドを使用して.png画像を作成すると、エラーが含まれているため画像を表示できないというエラーが表示されますが、「Render」を使用するとチャートが作成されますが、説明しているように時々. 以下は私のコードです。誰かが光を当ててくれることを願っています。

<?php
    /* pChart library inclusions */
     include("../../Library/class/pData.class.php");
     include("../../Library/class/pDraw.class.php");
     include("../../Library/class/pImage.class.php");
     include "../../connection.php";
    // Values from List.php
    $Selected=$_POST['Selection'];
    $MyData = new pData();  
    /* QUERY FOR THE CHART */
    $Requete = "SELECT * FROM table WHERE Sector = '$Selected' LIMIT 0 , 30";
    $Result  = mysql_query($Requete,$db)or die(mysql_error());
    while($row = mysql_fetch_array($Result))
     {
      $Sector = $row["Sector"];
      $Current_reading = $row["Current_reading"];
      $Old_Reading = $row['Old_reading'];
      $Month_Consumption = $row['Month_Consumption'];
      $Current_reading = $row['Current_reading'];
      $DM = $row['DM'];
      $FP = $row['FP'];
      $Cost = $row['Cost_KWh_$90.0000'];  


      $MyData->addPoints($Current_reading,'Current_reading');
      $MyData->addPoints($Old_Reading,'Old_reading');
      $MyData->addPoints($Month_Consumption,'Month_Consumption');
      $MyData->addPoints($DM,'DM');
      $MyData->addPoints($FP,'FP');
      $MyData->addPoints($Cost,'Cost_KWh_$90.0000');

     }
       /* Save the data in the pData array */
      $MyData->setAbscissa("Consumos_de");
      $MyData->setAbscissaName('February 2014');
      $MyData->setSerieDescription($Sector,"Sectores");
      $MyData->setAxisName(0,"Kw");  

     /* Create the pChart object */
     $myPicture = new pImage(800,230,$MyData);
     $myPicture->drawGradientArea(0,0,800,230,DIRECTION_VERTICAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>100));
     $myPicture->drawGradientArea(0,0,800,230,DIRECTION_HORIZONTAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>20));
     $myPicture->setFontProperties(array("FontName"=>"../../Library/fonts/verdana.ttf","FontSize"=>8));

     /* Draw the scale  */
     $myPicture->setGraphArea(50,30,780,200);
     $myPicture->drawScale(array("CycleBackground"=>TRUE,"DrawSubTicks"=>TRUE,"GridR"=>0,"GridG"=>0,"GridB"=>0,"GridAlpha"=>10));

     /* Turn on shadow computing */ 
     $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));

     /* Draw the chart */
     $settings = array("Gradient"=>TRUE,"DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"DisplayR"=>255,"DisplayG"=>255,"DisplayB"=>255,"DisplayShadow"=>TRUE,"Surrounding"=>10);
     $myPicture->drawBarChart($settings);

     /* Write the chart legend */
     $myPicture->drawLegend(680,12,array("Style"=>LEGEND_BORDER,"Mode"=>LEGEND_VERTICAL));

     /* Render the picture (choose the best way) */
     $myPicture->Render("/var/www/images/YourGraph.png");
?>
4

1 に答える 1

0

さて、これを行うことでうまくいきました:

次のすべてを while ループから移動しました。

$MyData->addPoints($Current_reading,'Current_reading');
$MyData->addPoints($Old_Reading,'Old_reading');
$MyData->addPoints($Month_Consumption,'Month_Consumption');
$MyData->addPoints($DM,'DM');
$MyData->addPoints($FP,'FP');
$MyData->addPoints($Cost,'Cost_KWh_$90.0000');

そして最後に私は変わりました

$myPicture->Render("/var/www/images/YourGraph.png");  

代わりにこれを追加しました:

$myPicture->autoOutput("YourChart.png");

グラフ化しようとしていた情報をもう少し整理する必要がありましたが、これで CPU 使用率が 100% になる問題は解決され、グラフが表示されました。これは本当に私の最初のステップでPHPあり、ここですべての混乱をお詫びします。これが誰かの役に立てば幸いです。

于 2014-09-29T05:04:22.153 に答える