• 締切済み

CGIでファイルが読み込めない

CGI初心者です。 (osはlinuxです。) #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; このスクリプトで、/home/data.txt(フルパスです)に書かれているデータを1行だけをブラウザで表示させたいのですが、表示できません。 どこがおかしいのか教えてください。 ちなみにdata.txtには実際に「abc」という文字1行しか入れていません。

  • CGI
  • 回答数1
  • ありがとう数0

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

>type sample.pl #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; >perl -c sample.pl Can't modify close in scalar assignment at sample.pl line 7, near ");" Bareword "DATA" not allowed while "strict subs" in use at sample.pl line 7. sample.pl had compilation errors. サーバーに持っていって実行する以前の問題。 入門書をもう一回よく読むことをオススメします。

関連するQ&A

  • [PERL-CGI] LWPを使った際リダイレクトされたか否かを知る方法について

    下記のように、任意のホームページを取得してそれを出力するプログラムがあるのですが、リダイレクトで引越しされたホームページにアクセスしても、特に問題なく表示されます。 できれば、リダイレクトされた場合であれば、次から本当のURLにアクセスしたいためそのホームページを記録したいのですが何か良い方法は無いでしょうか? ご存知の方、教えていただけ無いでしょうか? 宜しくお願い致します。 -CGI---------------------------------------------------- #!/usr/bin/perl print "Content-Type: text/plain\n\n"; $url = 'http://URLを入れる'; use LWP; use HTTP::Cookies; $file = "cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; __END__ if(リダイレクトされたならば){ open (OUT,">>RedirectLog.txt"); print OUT $url."\n"; close(OUT); } -CGI----------------------------------------------------

    • ベストアンサー
    • CGI
  • CGIで二つの仕事をしたい

    464487で質問したOtanoshikeです。 メール送信CGIは_mer_さんに教えて頂いたように直したら、無事動くようになりました。 今度は、このCGIの中で、メール送信後にファイル転送をしようとしています。 一応動いてはいるようなのですが、最後の確認ページが出ません。 どこが悪いのでしょうか?恐らくはまた基本的なことを無視しているのでしょうね。 よろしくお願いいたします。 (a.cgi) #!/usr/bin/perl require '../mimew.pl'; require '../jcode.pl'; $sendmail = "/var/qmail/bin/sendmail"; $master_id = "ho\@hoge.net"; $msg="メッセージ"; &jcode'convert(*msg,'jis'); open (ML,"| $sendmail $master_id"); print ML $msg; close(ML); $filename=$ARGV[0]; $file="/~/~/$filename"; $filetype='x-exe'; print "Content-Disposition:attachment;filename=\"$filename\"\n"; print "Content-type:application/$filetype\n\n"; open(FILE,"$file"); while(<FILE>){ print "$_"; } close FILE; print "Content-type: text/html\n\n"; print "<html><head>\n"; print "</head>\n"; print "<body>sent.\n"; print "</body></html>\n"; exit;

    • ベストアンサー
    • CGI
  • 次のcgiファイルを開くには? もう一度

    http://oshiete1.goo.ne.jp/qa3951263.html で質問している者です。 間違って、[回答への補足] に書いてしまいました。 もう一度質問させてください。すみません。 Location を 教えていただき、とても感謝しております。 でも、私の 001.cgi は 以下のように始まっております。 print header(-charset => 'Shift_JIS'); print start_html("001.cgi"); このprint header(-charset => 'Shift_JIS');を消して if (param('answer') eq $ans){ print ('Location:002.cgi\n\n'); } else{ print header(-charset => 'Shift_JIS'); ##省略## print endform; { としたのですが、だめでした。 if (param('answer') eq $ans) が 下の方にもう一度出てくるからでしょうか? ###### はじめ ##################### #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); print "Location:1266.cgi\n\n"; ###### おわり ##################### としたら、001.cgi を開くと 002.cgi へ飛ぶことができました。 どこに print "Location:1266.cgi\n\n"; を書けばよいのでしょうか? よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • CGIでFLASHを表示する

    CGIで他のFLASHファイルの内容をそのまま表示するにはどうすればいいのでしょうか。 Content-typeをapplication/x-shockwave-flashにすればいいようだったので、以下のようにしたのですが白紙のFLASHが表示されるだけで何も起こりません。 3~5行目の外部ファイルの取得方法が間違ってると思うのですが、なにとぞご教授よろしくお願いします。 #!/usr/bin/perl print "Content-type:application/x-shockwave-flash\n\n"; open(E,"_mj.swf"); print <E>; close(E); exit;

    • ベストアンサー
    • Perl
  • CGIのはじめのコ-ド

    #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "$doctype\n"; print "<HTML>\n"; print "<HEAD>\n"; 上記のCGIの4行目の print "$doctype\n"; は なにをしているのですか、宜しくお願いします。

    • ベストアンサー
    • CGI
  • テキストファイル内の変数を展開して出力したい

    テキストファイル内に変数を書いておいて、出力時に その変数を展開させる方法を教えてください。 具体的には、[test.txt]を[出力]のようにしたいのです。 ためしに[test.cgi]を作ったのですが[test.txt]の内容がそのまま出てきてしまいました。 [test2.cgi]ができるなら、[test.cgi]でもできると思っていたのですが… [test.cgi] #!/usr/local/bin/perl $moji="OK"; print "Content-type: text/html\n\n"; open(IN, 'test.txt'); while (<IN>) { print "$_"; } close(IN); exit; [test2.cgi] #!/usr/local/bin/perl $moji="OK"; $naka="<HTML><BODY>$moji</BODY></HTML>"; print "Content-type: text/html\n\n"; print "$naka"; } close(IN); exit; [test.txt] <HTML><BODY>$moji</BODY></HTML> [出力] <HTML><BODY>OK</BODY></HTML>

    • ベストアンサー
    • Perl
  • HTMLのファイルにCGI処理結果を表示する

    まずトップページはhtmlで作ります。 そのトップページにいつも変化する所があるのでcgiで処理を施したものをhtmlに貼り付けたいと思っています。 その場合に例えば画像を出力させる場合は <IMG src="cgi-local/top.cgi"> で指定し、 #!/usr/local/bin/perl print "Content-type: image/jpeg\n\n"; open FH,"<../image.jpg"; binmode FH; binmode STDOUT; print while(<FH>); close FH; をやれば動かせますが、これを画像ではなくhtmlを表示させるためには print "Content-type: image/jpeg\n\n"; を print "Content-type: text/html\n\n"; に変更する事により可能だと思いやってみたのですが、うまく出力できませんでした。 cgi処理をうまくhtmlに貼り付ける方法があるのでしょうか。どうか教えて頂けないでしょうか?お願します。(涙)

    • ベストアンサー
    • CGI
  • CGI Chart::Gnuplotの使用法

    コマンドラインからだと作成されるpngファイルがブラウザからだと作成されません。 ブラウザにデバッグ用のprint文は、表示されます。 http://localhost/~.../sample.pl を実行しても、 ブラウザに hello-helloが表示されるだけで、 file.pngが作成されません。 file.pngをブラウザから作成するには、どうしたら良いのでしょうか? よろしくお願いいたします。 コマンドラインからだと、gnuplotで作成されたfile.pngが作成されます。 bash-3.2$ perl sample.pl Content-type:text/html hello-hello 使用したプログラムは、以下のとおりです。 < sample.pl > #! /usr/bin/perl print "Content-type:text/html\n\n"; #use strict; #use warnings; use CGI; use Chart::Gnuplot; my $chart = Chart::Gnuplot->new( output => "file.png" ); my $dataSet = Chart::Gnuplot::DataSet->new( datafile => "test.data" ); print "hello-hello\n"; $chart->plot2d($dataSet);

    • ベストアンサー
    • Perl
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl/CGIについて

    #!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $jcode = './jcode.pl'; $to = 'ha***@***.ne.jp'; #$from = ''; $subject ='名鉄と地下鉄の直通運転'; # 文字コードライブラリの読み込み require $jcode; # メール送信 &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae\n"; print " $naiyou\n"; print "メールを送信しました\n"; end #確認表示の所で表示が改行されない。

    • ベストアンサー
    • Perl

専門家に質問してみよう