PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Images » Image_GraphViz » Bug #8380

Use readfile instead of fread and echo

Details

Request #8380Use readfile instead of fread and echo
Submitted2006-08-07 22:25 UTC
Fromphp at adaniels dot nl
Assignedjausions
StatusClosed
PackageImage_GraphViz
PHP Version5.1.4
Roadmaps(Not assigned)

Comments

[2006-08-07 22:25 UTC] php at adaniels dot nl

Description:
------------
First of all, love graphviz and your package. I have a small suggestion though.

Currently you are using fread and than echo. When the generated image is large, this will affect memory usage. It might be better to use fread instead.
Adding a step where the image is saved to file, also gives an option to save without reading it back to php and than writing again.

Saying this, I had not yet rendered any image where the size was a real problem.

Test script:
---------------
// output image
$gv->image();

// fetch image
$data = $gv->fetch();

// save image to file
$outputfile = $gv->saveImage();
rename($outputfile, dirname(__FILE__) . '/img/');

Expected result:
----------------
Currently:

function image($format = 'svg')
{
if ($data = $this->fetch($format)) {
...
echo $data;
}
}

function fetch($format = 'svg')
{
if ($file = $this->saveParsedGraph()) {
$outputfile = $file . '.' . $format;
$command = $this->graph['directed'] ? $this->dotCommand : $this->neatoCommand;
$command .= ' -T' . escapeshellarg($format) . ' -o' . escapeshellarg($outputfile) . ' ' . escapeshellarg($file);

@`$command`;
@unlink($file);

$fp = fopen($outputfile, 'rb');

if ($fp) {
$data = fread($fp, filesize($outputfile));
fclose($fp);
@unlink($outputfile);
}

return $data;
}

return FALSE;
}

Actual result:
--------------
Better might be:

function image($format = 'svg')
{
if ($outputfile = $this->saveImage($format) && filesize($outputfile)) {
...
fileread($outputfile);
@unlink($outputfile);
}
}

function fetch($format = 'svg')
{
if ($outputfile = $this->saveImage($format)) {
$fp = fopen($outputfile, 'rb');

if ($fp) {
$data = fread($fp, filesize($outputfile));
fclose($fp);
@unlink($outputfile);
}

return $data;
}

return FALSE;
}

function saveImage($format = 'svg')
{
if ($file = $this->saveParsedGraph()) {
$outputfile = $file . '.' . $format;
$command = $this->graph['directed'] ? $this->dotCommand : $this->neatoCommand;
$command .= ' -T' . escapeshellarg($format) . ' -o' . escapeshellarg($outputfile) . ' ' . escapeshellarg($file);

@`$command`;
@unlink($file);

return $outputfile;
}

return FALSE;
}