Zend Framework:img src标签中的PHP脚本导致图像损坏

时间:2014-08-31 20:39:25

标签: php image zend-framework jpgraph

我在版本1.11的Zend Framework项目中使用JpGraph库。我试图通过在img字段中包含php脚本来使用src标记显示某些数据的图表,如下所示:

echo "<img src='vgraph.php?param1=val1&param2=val2...

当我这样做时,唯一显示为图像的是我浏览器的默认损坏图像。由于Zend中的典型URL被视为控制器 - 操作对,因此我所包含的文件的路径也被视为控制器 - 操作对。为了调查我没有获取图像的原因,我在浏览器中查看了页面的来源。当我点击上述img标记的链接时,我被定向到包含错误的页面:

Invalid controller specified (vgraph.php)

我决不打算将脚本用作控制器。它只应该显示图形的图像。我不确定如何确保Zend仅将文件的输出用作图像,而不是将其路径用作URL。

以下是我用于图片的文件vgraph.php

<?php

/* graph the vital data */

require_once( 'path/to/Zend/project/web/library/jpgraph/jpgraph.php' ); 
require_once( 'path/to/Zend/project/web/library/jpgraph/jpgraph_line.php' );

/* get the needed parameters */
$id = $_GET['param1'];
$type = $_GET['param2'];
$from = $_GET['param3'];
$to = $_GET['param4'];

$graph = new Graph( $width, $height );

/* create the data and plot */
$obj = new CcFunc_VitalSigns();
$vitals = $obj->getVitalData( $id, $type, $from, $to );

/* configure everything */
$graph->setScale( 'intint' );
$graph->title->Set( "Graph of " . $type );
$graph->xaxis->title->Set( "X-Axis" );
$graph->yaxis->title->Set( "Numerical Value" );

$lp = new LinePlot( $vitals );
$lp->setColor( 'blue' );    
$lp->setWeight( 5 );

/* add the plot to the graph */
$graph->Add( $lp );

/* display the graph */
$graph->Stroke();

注意:我尝试过其他解决方案,例如将图表流式传输到png文件,并让src字段为的网址那个文件,但即使在向apache添加RewriteRule以防止重定向.png文件之后,我也遇到了同样的问题。我已经将这种方法作为最舒适(潜在)的解决方案。

编辑:之前我没有这么说过,但是img标签回显的代码不是一个控制器,实际上位于path/to/Zend/roject/web/application/scripts/views。脚本vgraph.php位于path/to/Zend/project/web/library

2 个答案:

答案 0 :(得分:1)

您需要将vgraph.php文件移动到公共文件夹才能使其正常工作,浏览器无法查看该文件以外的文件。

将其移至path/to/Zend/project/web/public/vgraph.php,将您的img标记更改为<img src="/vgraph.php?param1=val1&param2=val2...,一切都应该按预期工作。

答案 1 :(得分:-1)

在视图中链接时尝试将完整路径指定为:

<?php echo $this->baseURL();?> 

Zend View Helpers

这将返回localhos / [APP] /

希望这有帮助

尝试将所有内容放在generateAction方法中的Graph控制器中,然后链接到它:

<a href="<?php echo $this->baseURL();?>/graph/generate/?param1=val1&param2=val2...">Generate</a>