Gpgraph的使用与配置--第二篇

在使用Gpgraph时遇到只能运行一次的问题,原因是缓存目录权限为只读。解决方案包括:关闭PHP的output_buffering选项,修改jpg-config.inc.php的缓存配置,注释jpgraph_ttf.inc.php中的汉字转换代码,以及处理因HTTP头部已发送导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照Gpgraph的使用与配置--第一篇的方法使用Gpgraph,运行代码发现只能正常运行一次,再次运行代码时发现浏览器不能正常输出图片。纠结半天后发现是缓存的问题。

找到jpg-config.inc.php的第38行:define('CACHE_DIR','/jpgraph_cache/');这个CACHE_DIR是设置的缓存目录,找到这个目录。我的是在C盘下,打开C盘会发现多了个tmp文件夹,打开tmp会发现有个jpgraph_cache文件夹,这个就是缓存文件。通过查看属性会发现tmp的文件夹为只读。这也就是问题所在,再次运行代码时,由于缓存是只读的,无法写入,由于权限问题导致的程序不能再次正常运行。临时的解决方法就是可以把tmp文件夹删掉即可。但是这并不是最根本的解决方法,因为这么做,每次运行代码后都要去删除tmp缓存文件夹,太麻烦。解决方法就是禁止缓存输出。禁止缓存输出的原因是在PHP开发期间,我们需要能够看到jpgraph类库潜在的错误信息,而开启缓存会阻止错误信息及时出现。

解决步骤:

1. 打开php.ini配置文件,找到output_buffering选项,并将选项修改为

output_buffering =xx,也就是注释掉缓存输出。

2. 打开jpg-config.inc.php,修改相应的缓存配置项:

第38行改为:// define('CACHE_DIR','/jpgraph_cache/');

第77行改为:define('USE_CACHE',false);

3. 打开jpgraph_ttf.inc.php

183--191if内的代码注释掉,直接返回$aTxt。代码:

 elseif( $aFF === FF_SIMSUN ) {
            // Do Chinese conversion
           // if( $this->g2312 == null ) {
             //   include_once'jpgraph_gb2312.php' ;
              //  $this->g2312 = newGB2312toUTF8();
           // }
          //  return$this->g2312->gb2utf8($aTxt);

return $aTxt;

}

4. 将运行代码中的汉子格式转换注释掉。

//$title = iconv("UTF-8", "gb2312",$title);

5. 运行代码:

$datay=array(160,180,203,289,405,488,489,408,299,

166,187,105);
//创建画布
$graph = new Graph(600,300,"auto");
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);
//创建画布阴影
$graph->SetShadow();
//设置显示区左、右、上、下距边线的距离,单位为像素
$graph->img->SetMargin(40,30,30,40);
//创建一个矩形的对象
$bplot = new BarPlot($datay);
//设置柱形图的颜色
$bplot->SetFillColor('orange'); 
//设置显示数字  
$bplot->value->Show();
//在柱形图中显示格式化的图书销量
$bplot->value->SetFormat('%d');
//将柱形图添加到图像中
$graph->Add($bplot);
//设置画布背景色为淡蓝色
$graph->SetMarginColor("lightblue");
//创建标题
$title = "中国南京";
$graph->title->Set($title);//已经不需要字体转换了
//设置X坐标轴文字
$a=array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
$graph->xaxis->SetTickLabels($a); 
//设置字体
$graph->title->SetFont(FF_SIMSUN);
$graph->xaxis->SetFont(FF_SIMSUN); 
//输出矩形图表
$graph->Stroke();

运行后即可看到浏览器输出的图片:



如果运行代码过程中出现了下面的错误提示:

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

解决方法就是上述的步骤3,直接返回$aTxt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值