電子書籍の厳選無料作品が豊富!

Perlで作成したCGIについて

Perlで作成したCGIについて質問させていただきます。

####################
##(1)system.cgi ##
####################
#!c:/Perl/bin/perl.exe
use strict;
use warnings;
use CGI;
use CGI::Carp('fatalsToBrowser');
use CGI qw(:standard);

print "Content-type:text/html;charset=utf8\n\n";

system('C:\\test.txt');

#####################################################

C直下にあるtest.txtの中身は「abcd」など
簡単なものです。

#####################################################

###################
##(2)win32.cgi ##
###################


#!c:/Perl/bin/perl.exe
use strict;
use warnings;
use CGI;
use CGI::Carp('fatalsToBrowser');
use CGI qw(:standard);
use Win32::API;

print "Content-type:text/html;charset=utf8\n\n";

my $MessageBox = Win::API -> new("user32","MessageBoxA","NPPN","N");
$MessageBox -> Call(0,"HelloWorld","Message",0);

#####################################################
#####################################################
以下にスペックを書きます。

Microsoft Windows XP
Professional
version2002
Service Pack2
Genuine Intel(R)CPU
L2300 @1.50GHz
1.50GHz,1.49GB RAM

・ActivePerl
ver5.10.1 built for MSWin32-x86-multi-thread

・Apache
Apache 2.2.14(Win32)
#####################################################

上記の(1)、(2)のプログラムをエクスプローラ上(ローカル)で実行させて(1)ではテキストファイルを、
(2)ではメッセージボックスを表示させたいです。

結果は時間がかかるだけでTimeOutの設定である5分で切れてしまい何も起こりません。
しかし、全く同じプログラムで拡張子を.plに変更してコマンドプロンプトで実行すると、
期待通り(1)はテキストファイルが開かれ、(2)ではメッセージボックスが出てきます。

(1)、(2)ともCGIではsystemおよびMessageBoxの部分をコメントアウトして
print文などを書けば普通にエクスプローラに表示されます。
(かなりhtmlとしては不備があると思いますが・・・)

どうすればCGIで(1)、(2)のプログラムが期待通りの動きをするのか
どうぞご教授のほどよろしくお願いいたします。
何か足りない情報や意味の分かりづらい個所がありましたら、仰ってください。
ちなみにこのプログラムは公開するために作成しているのではありません。

下手な説明、長文すみません。

A 回答 (1件)

CGIは、クライアントに対してはhtmlを動的に生成し出力するのが(一般的な)使い方です。


やりたいことを想像すると、以下のようなcgiになると思います。
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;

my $java_script = << "END_SCRIPT";
function onload() {
alert('Hello javascript', 'New Window', 'width=300, height=300');
};
END_SCRIPT

my $q = CGI->new();
print $q->header( -charset => 'UTF-8' ),
$q->start_html(
-lang => 'ja',
-title => ' T I T L E ',
-script => { -language => 'javascript', -code => $java_script }
);

my $file = shift || '/tmp/tmp.txt';
open my $fh, '<', $file or die "$!:$file";
my $text = do {local $/ = undef; <$fh>};
close $fh or die "$!:$file";

print $q->p($text), $q->end_html;

色々書いてありますが、上のcgiを実行すると以下の内容がprintされるだけです。
---
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title> T I T L E </title>
<script type="text/javascript">//<![CDATA[
function onload() {
alert('Hello javascript', 'New Window', 'width=300, height=300');
};

//]]></script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
aaaa
</p>

</body>
</html>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お礼が遅れてしまい、大変失礼いたしました。

補足なのですが、win32::APIを必ず使ってウインドウ画面を出力させたいと考えております。
説明不足で申し訳ありません。
もしよろしければ、さらに、ご教授のほどよろしくお願いいたします。

お礼日時:2010/04/19 13:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!