Почему rrdtool не генерирует вывод PNG в моей программе Perl CGI? - PullRequest
0 голосов
/ 09 октября 2010

Я пытаюсь вывести изображение из RRD Tool, используя Perl. Я разместил соответствующую часть скрипта CGI ниже:

sub graph
{
my $rrd_path = $co->param('rrd_path');
my $RRD_DIR = "../data/";

#generate a PNG from the RRD
my $png_filename = "-"; # a '-' as the filename send the PNG to stdout
my $rrd = "$RRD_DIR/$rrd_path";

my $png = `rrdtool graph $png_filename -a PNG -r -l 0 --base 1024 --start -151200 -- vertical-label 'bits per second' --width 500 --height 200 DEF:bytesInPerSec=$rrd:bytesInPerSec:AVERAGE DEF:bytesOutPerSec=$rrd:bytesOutPerSec:AVERAGE CDEF:sbytesInPerSec=bytesInPerSec,8,* CDEF:sbytesOutPerSec=bytesOutPerSec,8,* AREA:sbytesInPerSec#00cf00:AvgIn LINE1:sbytesOutPerSec#002a97:AvgOut VRULE:1246428000#ff0000:`;

#print the image header 
use bytes;
print $co->header(-type=>"image/png",-Content_length=>length($png));

binmode STDOUT;
print $png;
}#end graph

Это прекрасно работает в командной строке (perl graph.cgi> test.png) - конечно, закомментируя заголовок, а также на моей машине для разработки Ubuntu 10.04. Однако, когда я перехожу на рабочий сервер Centos 5, это не так, и браузер получает контент длиной 0:

Ubuntu 10.04 / Apache:

Request URL:http://noc-student.nmsu.edu/grasshopper/web/graph.cgi
Request Method:GET
Status Code:200 OK
Request Headers
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Cache-Control:max-age=0
User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko)     Chrome/7.0.517.36 Safari/534.7
Response Headers
Connection:Keep-Alive
Content-Type:image/png
Content-length:12319
Date:Fri, 08 Oct 2010 21:40:05 GMT
Keep-Alive:timeout=15, max=97
Server:Apache/2.2.14 (Ubuntu)

А с сервера Centos 5 / Apache:

Request URL:http://grasshopper-new.nmsu.edu/grasshopper/branches/michael_dev/web/graph.cgi
Request Method:GET
Status Code:200 OK
Request Headers
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Cache-Control:max-age=0
User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.36 Safari/534.7
Response Headers
Connection:close
Content-Type:image/png
Content-length:0
Date:Fri, 08 Oct 2010 21:40:32 GMT
Server:Apache/2.2.3 (CentOS)

Здесь есть use bytes и ручная настройка длины контента, чтобы попытаться решить проблему, но без них то же самое. То же самое с настройкой binmode на STDOUT. Сценарий отлично работает из командной строки на обеих машинах.

Ответы [ 2 ]

4 голосов
/ 09 октября 2010

См. Мой Как я могу устранить неполадки моей программы Perl CGI .Как правило, разница между запуском вашей программы из командной строки и с веб-сервера зависит от среды.В этом случае я ожидаю, что либо rddtool не указан в пути, либо пользователь веб-сервера не сможет его запустить.

Обратные пометки захватывают только стандартный вывод.Возможно, в журнале ошибок веб-сервера есть некоторые стандартные сообщения об ошибках.

1 голос
/ 09 октября 2010

Вы уверены, что ваш веб-пользователь имеет доступ к вашим данным? Попробуйте, чтобы CGI записал png в файловую систему, чтобы убедиться, что он сгенерирован правильно. Если это так, проблема в передаче (заголовки, кодировки и т. Д.). Если нет, то он не связан с веб-сервером и, вероятно, связан с разрешениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...