системный вызов gnuplot из php для создания заговора? - PullRequest
4 голосов
/ 03 августа 2011

Итак, я использую программу php, чтобы прочитать файл, внести некоторые изменения, а затем записать его в новый файл. После этого я вызываю gnuplot, используя системный вызов:

system('cat sarx.conf | /usr/bin/gnuplot');

sarx.conf имеет команды gnuplot для создания графика. Проблема в том, что если запустить мой php из командной строки (на сервере linux), он сгенерирует образ и сохранит его на диске. Но когда я делаю то же самое, запустив php в моем браузере, он генерирует изображение и пытается выложить его в браузер, не сохраняя его на диске.

Вещи, которые я пробовал:

  1. Возможно, у меня были проблемы с настройками разрешений, но это не помогло.

  2. Я также жестко закодировал путь, в котором я хочу, чтобы изображение было в sarx.conf. Это тоже не помогло.

  3. Я также пытался найти его в каталоге tmp - не повезло !!

У кого-нибудь есть идеи, как мне заставить это работать? Мне нужно сохранить это изображение на диске, чтобы мой сайт мог взять его, чтобы показать сюжет позже. Есть ли какие-нибудь php-файлы, которые могут захватить образ и записать его на диск?

1 Ответ

1 голос
/ 09 февраля 2014

Здесь есть отличный PHP-интерфейс с лицензией LGPL для gnuplot: http://www.liuyi1.com/PHP-GNUPlot/

Вот как вы можете сделать нечто подобное:

$my_file = tempnam();
$handle = popen('gnuplot', 'w');
fwrite($this->ph, "Run some gnuplot commands here\n");
fwrite($this->ph, "set term png\n");
fwrite($this->ph, "set output ".$my_file."\n");
fwrite($this->ph, "replot\n");
flush($handle);
pclose($handle);
header('Content-Length: '.filesize($my_file));
header('Content-Type: image/png');
print file_get_contents($my_file);
unlink($my_file);
...