Zend Framework: PHP-скрипт в теге img src, вызывающий испорченное изображение

Я использую библиотеку JpGraph в проекте Zend Framework версии 1.11. Я пытаюсь отобразить график некоторых данных, используя img тег, включив скрипт PHP в src поле, как так:

echo "<img src='vgraph.php?param1=val1&param2=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&param2=val2... и все должно работать так, как вы ожидаете.

При связывании попробуйте в представлении указать полный путь как:

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

Помощники Zend View

Это вернет localhos/[APP]/

Надеюсь это поможет

Попробуйте поместить все в контроллер Graph в методе generateAction, и вы можете сделать ссылку на него:

<a href="<?php echo $this->baseURL();?>/graph/generate/?param1=val1&param2=val2...">Generate</a>
Другие вопросы по тегам