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


Zend Framework: PHP script in img src tag causing broken image

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

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字段作为文件的URL,但我也遇到了同样的问题,即使在向apache添加了RewriteRule以阻止重定向.png文件之后也是如此。我认为这种方法是最舒服的(潜在的)解决方案。

编辑:我以前没有说过,但img标记的echo'd代码是而不是控制器,实际上位于path/to/Zend/roject/web/application/scripts/views中。脚本vgraph.php位于path/to/Zend/project/web/library中。

您需要将vgraph.php文件移动到您的公用文件夹中才能正常工作,浏览器无法查看除此之外的文件。

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

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

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

Zend View帮助程序

这将返回localhos/[APP]/

希望这能帮助

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

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