Zend Framework: PHP-скрипт в теге img src, вызывающий испорченное изображение
Я использую библиотеку JpGraph в проекте Zend Framework версии 1.11. Я пытаюсь отобразить график некоторых данных, используя img
тег, включив скрипт PHP в src
поле, как так:
echo "<img src='vgraph.php?param1=val1¶m2=val2...
Когда я делаю это, единственное, что отображается как изображение, - это изображение по умолчанию в моем браузере. Поскольку типичные URL-адреса в Zend рассматриваются как пары действий контроллера, путь к файлу, который я включаю, также рассматривается как пара действий контроллера. Чтобы выяснить, почему я не получаю свое изображение, я просмотрел источник страницы в браузере. Когда я нажал на ссылку для выше 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-адрес этого файла, но я столкнулся с той же проблемой, даже после добавления RewriteRule
Apache, чтобы предотвратить перенаправление .png
файлы. Я выбрал этот метод как наиболее удобное (потенциальное) решение.
РЕДАКТИРОВАТЬ: я не говорил этого раньше, но код, где img
Тэг echo'd не является контроллером, и на самом деле находится в path/to/Zend/roject/web/application/scripts/views
, Сценарий vgraph.php
находится в path/to/Zend/project/web/library
,
2 ответа
Вам нужно переместить файл vgraph.php в общую папку, чтобы это работало, браузер не может просматривать файлы за пределами этого.
Переместить его в path/to/Zend/project/web/public/vgraph.php
измените тег img на <img src="/vgraph.php?param1=val1¶m2=val2...
и все должно работать так, как вы ожидаете.
При связывании попробуйте в представлении указать полный путь как:
<?php echo $this->baseURL();?>
Это вернет localhos/[APP]/
Надеюсь это поможет
Попробуйте поместить все в контроллер Graph в методе generateAction, и вы можете сделать ссылку на него:
<a href="<?php echo $this->baseURL();?>/graph/generate/?param1=val1¶m2=val2...">Generate</a>