• 締切済み

CGIスクリプトのブラウザから実行エラー

OS:  RedHatLinux7.2 perl -v :  This is perl, v5.6.2 built for i686-linux HttpErrLog:  display: Unable to connect to X server ().  Premature end of script headers: /XXX/XXX/XXX.cgi GD::Graphを用いたperlスクリプトをブラウザから実行すると、 上記のようなエラーとなってしまいます。 コマンドでの実行では問題無く動作します。 「print」のみの簡易cgiで試行しましたが、問題なく実行されます。 cgiのパーミッションも確認しました。 ソースは以下の通りです。 作業が進まなくて困っています。 どなたかお知恵をお貸しください。 perl.cgi: --------------------------------------------------------- #!/usr/bin/perl -- use strict; use GD::Graph::bars; my @xLabels = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); my @data2002 = qw( 17 19 26 38 56 64 67 53 40 29 21 13 ); my @data2003 = qw( 19 24 27 41 56 69 75 60 44 33 22 15 ); my @data = ( \@xLabels, \@data2002, \@data2003 ); my $graph = GD::Graph::bars->new( 800, 600 ); $graph->set( title => "Rainfall 2002/2003", y_label => "Millimetres" ); my $image = $graph->plot( \@data ) or die( "Cannot create image" ); open( OUT, "| display -") or die( "Cannot display image: $!" ); binmode OUT; print OUT $image->png(); close OUT; ---------------------------------------------------------

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 私はPerlもGD::Graphも良く分からんのだが、Apache(を実行しているユーザ)がXサーバに接続できないと書かれていますな。  Xが自由に使えればよいんだけど・・・・Xfbとか使う必要があるかも知れんです。Redhat 7.2にあるかどうかは分からんですが・・・・。 ・Xfbで:10あたりのディスプレイを開く。 ・apacheを起動する時かcgiを実行する時かにDISPLAY=localhost:10.0という環境変数を設定する。  この辺はXの基礎が無いとかなりつらいと思う。

bibicq
質問者

お礼

ありがとうございます。 Perlの記述に関する問題であることが判明し、 記述の修正で解決いたしました。 ご指摘のXに関する基礎、これから勉強していきます。

関連するQ&A

  • perlでGD::Graph。実行でエラー

    OS: RedHatLinux7.2 perl -v : This is perl, v5.6.2 built for i686-linux HttpErrLog: display: Unable to connect to X server (). Premature end of script headers: /XXX/XXX/XXX.cgi GD::Graphを用いたperlスクリプトを実行すると、上記のようなエラーとなってしまいます。 コマンドでの実行では問題無く動作します。cgiのパーミッションも確認しました。ソースは以下の通りです。作業が進まなくて困っています。 どなたかお知恵をお貸しください。 perl.cgi: --------------------------------------------------------- #!/usr/bin/perl -- use strict; use GD::Graph::bars; my @xLabels = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); my @data2002 = qw( 17 19 26 38 56 64 67 53 40 29 21 13 ); my @data2003 = qw( 19 24 27 41 56 69 75 60 44 33 22 15 ); my @data = ( \@xLabels, \@data2002, \@data2003 ); my $graph = GD::Graph::bars->new( 800, 600 ); $graph->set( title => "Rainfall 2002/2003", y_label => "Millimetres" ); my $image = $graph->plot( \@data ) or die( "Cannot create image" ); open( OUT, "| display -") or die( "Cannot display image: $!" ); binmode OUT; print OUT $image->png(); close OUT; ---------------------------------------------------------

    • ベストアンサー
    • Perl
  • use CGI

    サンプルスクリプトのなかに use CGI qw(:cgi :form); use CGI::Carp qw(fatalsToBrowser); use Image::Magick; と書かれていたのですがuse CGI::Carp qw(fatalsToBrowser);は意味わかったのでコメントアウトしましたがuse CGI qw(:cgi :form);は何を読み込んでいるのですか?コメントアウトしても大丈夫でしょうか? イメージマジックは使うのでそのままにしてあります よろしくお願いします

    • ベストアンサー
    • Perl
  • CGIからCGIを、CGI環境変数付きで実行するには?

    CGI(Perl)からCGI(Perl)を実行してその出力を得るには どうしたら良いでしょうか。 そのCGIがもっている環境変数(IPアドレスとか、POSTデータ)も 渡したいのですが・・・。 Openでパイプを使ってやればいいとまではわかり、 環境変数などを渡さないで純粋にCGIを実行させて その出力を受け取るところまでは出来ました。

    • ベストアンサー
    • Perl
  • Perlのグラフ化について

    初質問させていただきます。 まず環境は、Perlversion5.16.1でActivePerlを用いております。 GD::Graphモジュールを使って棒グラフ、点グラフを作りたいと思っています。 しかし、(数字は変えてあります) .... (1)my @labels = qw(0 5 10 15 20 25 30); #X軸の目盛り (2)my @dataest = qw(3 6 9 12 15 18 21 24); #グラフにするデータ (3)my @data = (\@labels,\@dataset); ..... と、入力して出力しても、ラベルはちゃんと(1)の目盛りが置かれるのですが、肝心なグラフ化したいデータの(2)が反映せず、何故か(1)の値が再度取られ、グラフが一定になってしまいます。 http://www.gadgety.net/shin/tips/unix/perl-gd.html 上記のURLの参考プログラムのままだったらちゃんと実行されるのですが、(2)のdatasetの値をいれかえると何故かこのような現象に… どなたかご教授願えませんでしょうか?他に必要な情報があれば補足・返信いたします。

    • ベストアンサー
    • Perl
  • HTML上(javascript)からCGIを実行する方法

    javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI) を実行する方法を探しています。 下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に 『test』と表示するのみ)を表示したいと考えています。 利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、 cgiが使用できるサーバ上のcgi結果を取得したいものです。 通常のcgiのように、1ページでcgi結果を表示するものではなく、 HTMLファイルの一部にcgi処理結果を表示させたいものです。 そもそも、SSIを使用しなければ下記のようなHTML内にcgiなどの 実行結果を表示する事は出来ないのでしょうか。 よろしくお願い致します。 ※下例のプログラムではcgi結果は表示されませんでした・・・。 ---<index.htm>---------------------------------------- <HTML> <BODY> <SCRIPT language="Javascript" src="http://xxx.xxx.xxx.xxx/test.cgi"></SCRIPT> </BODY> </HTML> ---<test.cgi>---------------------------------------- #!/usr/bin/perl print "test"

  • cgi(perl)を実行のみしたい

    HTMLよりCGI(PERL)を起動し、ログファイルの読み書きを実行し、そのまま終了させることは出来ないでしょうか? CGIからデータを戻す必要は無く、ブラウザへの表示はHTMLファイルがそのまま表示される形で問題ありません。 宜しくお願いします。

  • cgi 実行時のエラー

    perl初心者でまた質問させていただきます。「送信」ボタンをクリックすると、HPで入力してもらった情報をメールで送信するcgiを作成しました。ただ、実行すると、 Can't locate object method "new" via package "Net::SMTP" (perhaps you forgot to load "Net::SMTP"?) at C:\www\cgi-bin\downloadmail.cgi line 62. というエラーが出ます。 cgiは、 my $smtp = Net::SMTP->new($192.1.1.1); $smtp->mail($email); $smtp->to($to); $smtp->data(); $smtp->datasend("From:$email\n"); $smtp->datasend("To:***@***.co.jp\n"); $smtp->datasend("Subject:テストメール\n"); #件名 $smtp->datasend("Content-Type: text/plain; charset=iso-2022-jp\n\n"); $smtp->datasend("テストメール\n"); $smtp->dataend(); $smtp->quit; というものです。どなたか分かりましたらお願いします。

    • ベストアンサー
    • Perl
  • HTML表示での実行でファイルが書き込みモードで開けない

    perlの勉強をしていて困っています。 perlをHTML表示で実行した時にファイルが書き込みモードで開けません。コマンドラインで実行すると開いて書き込まれます。よってファイルの書き込み禁止などでは無いようです。以下がソースです。 #!/Perl/bin/perl $|=1; print "content-type: text/html; charset=Shift_JIS\n\n"; open(OUT, ">other.html") or die "not open"; print OUT "test"; close(OUT); 読み込みモードでは成功します。フリーのCGIなども見ましたが通常は出来るはずだと思うのですが・・・。 ちなみにperlはApache2.0で動作させています。こちらの設定の問題でしょうか?

    • ベストアンサー
    • Perl
  • CGI実行環境下の.jsや.cssが動きません

    環境 OS:RedhatLinux ES3 WevServer:Apache/2.0.54 Perl 5.8.0 CGIを設置しているディレクトリのなかに、JapaScriptを書いている xxx.jsとスタイルを定義しているxxx.cssを置いているのですが、 CGIを実行すると、Apacheのエラーログの中に パーミッションが755だと (8)Exec format error: exec of '/hoge/xxx.css' failed, (8)Exec format error: exec of '/hoge/xxx.js' failed, パーミッションを666すると (13)Permission denied: exec of '/hoge/xxx.css' failed, (13)Permission denied: exec of '/hoge/xxx.js' failed, が出力されてしまいます。 もちろん、JavaScriptのエラーも出てしまいます。 .jsや.cssを正常に読み取らせるにはどのようにhttpd.confを 設定すればよいのでしょうか? ※ちなみに、CGIの実行を許可(ScriptAlias)していない ディレクトリでは.jsや.cssは正常に動いています。

    • ベストアンサー
    • CGI
  • Apacheサーバに接続してcgiが実行できません。

    サーバはRedHat Linux8で、クライアントはwin2000です。 表示は 「Server Error! Premature end of script headers: dekiru.cgi 」 と出ます。 過去の質問からsuexecの問題だという情報を見つけ、 /var/log/httpd/suexec.log を見てみると、 「uid: (500/XXX) gid:(500/500) cmd:yyy.cgi cannot get docroot informaiton (/home/XXX)」 という表示でした。 homeやXXX、yyy.cgiは全て755という権限でないといけないということで全て755に変更してサーバを再スタートしましたが、解決しません。 デフォルトで/var/www/cgi-bin以下に 同じyyy.cgiをおいて、 http://サーバIP/cgi-bin/yyy.cgiをブラウザでみると、 実行可能です。 メッセージからドキュメントroot情報がgetできないということですがこれ以上やるべきことが見つからず行き止まり状態です。 他に考えられる原因はありませんでしょうか? よろしくお願いします。