• ベストアンサー

構文チェックについて

#!/usr/local/bin/perl $perl = `perl -wc web.cgi`; $perl=~s/[\r\n]/<BR>/g; print <<"END"; Content-type: text/html <HTML> <HEAD><TITLE>PERLCHECK</TITLE></HEAD> <BODY> perl<BR>$perl </BOBY> </HTML> END exit; と以上のように書いてますが。telnet上ではOKと出ますがブラウザでみるとエラーが出ます。 やりたいことは、Telnetを使っての構文チャックではなく、ブラウザ上で構文のチェックは出来ないか模索しています。上記の`UNIXコマンド`の部分で、freeやdf等のコマンドを実行させると実行結果が得られるので、その延長で出来ないかと考えてます。初心者なのですいませんが教えてください。

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 えとですね(笑)  これは、原因は「$perl = `perl -wc web.cgi`;」の部分です。  この web.cgi の部分は telnet 上では「HP管理者」が実行しますが、Web上では「HP閲覧者」が実行することになります。  つまり、「HP閲覧者が、HTTPサーバーを経由せずにCGIを使う」という、(セキュリティ的に)通常はやってはいけないことをやってしまうことになるんです。  ブラウザからの閲覧は、基本的にすべてゲストログイン扱いになるので、ブラウザ経由でそういうことするのは難しいかと思います。  かくいう俺も、昔HTTP経由でHPの更新とかできるCGIを作ったことがありましたが、制約が多すぎてやめてしまいました(^_^;

その他の回答 (2)

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.3

deagleさんが触れられているように、 実効ユーザの違いじゃないですか? $perl = `df`; なら正しい結果が得られるんですよね。 それじゃ、$perlの中に書いたものが悪いと 思われますよね。 1.perlのパスが通ってない   `perl ...`を`/usr/local/bin/perl ...`に   してみる 2.web.cgiってどこにあるの?   この書き方だと、telnetでログインした   ときのホームディレクトリにあるんですか?   web.cgiをフルパスで指定したらどうですか? 3.パーミッションの問題   web.cgiをこのCGIの実効ユーザが読めない。   どういったユーザ名でCGIが実行されてるか、   設定内容を知りませんが、guestならguestが   見にいけないような場所にweb.cgiを置いてませんか?   あるいは、web.cgi自体のパーミッションがきついとか。 HTTPサーバのエラーログを見たらどうなってるんですか? 何か原因が書いてありません?

  • ayucat
  • ベストアンサー率12% (7/55)
回答No.1

Content-type: text/html を Content-type: text/html; とか?  どんなエラーが出るのか、詳しくエラーを書けば、 もう少し分かるかも?

kasahatahanako
質問者

補足

telnet上では、syntax OKと出ます。 ブラウザ上では http://testsite.helpkeeper.net/users/tajima/index/web/perl.cgi と出ます。 ブラウザで、構文チェックとcgiのプログラムでは不可能なことですか?

関連するQ&A

  • perl -wc

    telnet を利用できないユーザーの為に、ブラウザ上でPerl(CGI)の文法チェックができるようにしています。 フォームでファイル名を入力させ、チェックプログラム内で "perl -wc $filename" を実行して結果を出力させるだけだと思い作成したのですが、実行結果を受け取ることができません。 apache のログには実行結果が書かれているのでコマンドは正常に動作しています。  open(IN, "perl -wc $filename |");  while (<IN>) {   print $_; と  $ret=`perl -wc $filename`; でやってみましたがダメでした。 どなたかご教授願います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlからjavascript構文の出力について

    はじめまして。 現在javascriptを勉強中の者です。 PerlからHTML構文内にjavascript構文を追記し出力しようとしていますが、追記してPerlを実行させただけでInternal Server Errorとなってしまいます。 過去ログをいくつか見させて頂きましたが、自分のソースのどこが悪いのかさっぱりです;; やりたいことは、登録完了ポップアップを表示させるだけです。 表示条件等は別として、まずjavascript構文をソースに追記してポップアップを表示させたいです。 どうか良きアドバイスをお願い致します。 #!/usr/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; print qq! <HTML> <HEAD> <META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP"> <META name="robots" content="noindex,nofollow"> <TITLE>登録画面</TITLE> </HEAD> <BODY> <script type="text/javascript"> <!-- alert("登録完了"); // --> </script> <FORM ACTION="test.cgi" METHOD="post"> <FONT SIZE="4"><B>登録画面</B></FONT>  </BODY> </HTML> !;

    • ベストアンサー
    • Perl
  • 初歩的なCGIですが

    #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>perlテスト</TITLE></HEAD>\n"; print "<BODY>\n"; print "本文1<BR>\n"; print "本文2<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; 上記プログラムをFTPサーバにアップロードして、perlプログラム内では正しい結果が出たのですが、ブラウザ上で確認したら、htmlのタグが除かれた状態のソースが出てきました。  正しい結果をブラウザ上で表示させるにはどうすればいいのでしょうか?教えてください。

    • ベストアンサー
    • CGI
  • printfの働き

    以下のCGIプログラムで、なぜprintf構文が反映されないのでしょうか? #! c:/usr/local/bin/perl $\ = "\n"; %color =("apple"=>red,"banana"=>yellow,"sky"=>blue,"tree"=>green); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><title>CGI練習</title></head> <body> END print "<hr>"; foreach(keys(%color)){ printf("%-10s %7s<br>",$_,$color{$_}); } print <<END; </body> </html> END

    • ベストアンサー
    • CGI
  • CGIでhtmlを作成するもブラウザに表示されない(ソース表示あり)

    PerlでHTMLを表示するCGIを作成しました。 ローカルPCで試しているのですが、ブラウザは真っ白な表示で、ステイタスバーには「ページが表示されました」のメッセージがでます。 ソースを表示するとちゃんと指定したHTMLタグがあります。 何が正常な表示の妨げになっているのでしょう。 ちなみにPerlのコードはそんなに難しいものではなく #!/usr/local/bin/perl require "./lib/cgi-lib.pl"; &ReadParse(); print <<END; content-type: text/html <html> <head> <TITLE>送信処理</TITLE> </head> <body bgcolor="#cccccc"> <center> $in{'data'}<BR> </center> </body> </html> END 程度のものです。 ・マシンは富士通FMVでOSはWinXP ・WebサーバーソフトはAN HTTPD Daemon Version 1.41g ・CGIはCygwinのPerl5.8.0です。 ・ブラウザはIE6-SP2です。 この様にブラウザで真っ白な表示になるのは1つのCGIファイルだけで、他のCGIファイルは正常にブラウザ表示されます。

    • ベストアンサー
    • Perl
  • if構文を追加するとうまくうまく動きません。。。

    すみません、CGIの初心者なのですが、下記のプログラムをしたところうまく起動せず困っております。ifの構文を抜いた場合はうまく動くのですが、名前欄等を入力されなかった場合、エラー表示を出したく、if文を追加したのですが、うまく動きません。どなたか原因おわかりになりますでしょうか? #!C:\Perl\bin\perl # ライブラリ require 'cgi-lib.pl'; # デコードサブルーチン &ReadParse(*form); # ライブラリ require 'kaiin_sub.pl'; #名前欄、メールアドレス欄、住所欄、郵便番号欄がのチェック if($form{'name'} eq""||$form{'mail'} eq""||$form{'post'} eq""||$form{'jyusyo'} eq""){ #必要事項が空白のとき #エラーコードを表示するサブルーチン &input_error; #cgiプログラムの終了 exit; }else{ # ライブラリ require 'jcode.pl'; # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); # 連想配列から値だけを取り出し、区切りのハイフンを追加 $data = "$form{'name'}\n$form{'furigana'}\n$form{'mail'}\n$form{'post'}\n$form{'jyusyo'}\n$form{'jyusyo1'} \n$form{'kansou'}\n\n----------\n\n"; # 追加書き込みモード open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."; flock(ENQ, 2); print ENQ $data; flock(ENQ, 8); close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>(^_^)</TITLE> </HEAD> <BODY bgcolor="cornflowerblue"> <CENTER> <B><FONT size="6"> <FONT color="white"> <BR> 会員登録は完了致しました。 <P> ご協力ありがとうございました。</FONT> <P> <FONT color="white">(^O^)/~</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML } またkaiin_sub.pは以下となります。 # -- 入力不足エラーを表示するサブルーチン -- sub input_error { print "Content-type:text/html\n\n"; print << "END_OF_ERROR"; <HTML> <HEAD> <TITLE>エラー</TITLE> </HEAD> <BODY> <CENTER> <FONT size="6" color="red"><B> <BR> お名前欄、メールアドレス、郵便番号、住所のいずれかが空白です <P> もう一度入力して下さい。 </B></FONT> </CENTER> </BODY> </HTML> END_OF_ERROR } 宜しくお願い致します。

    • 締切済み
    • CGI
  • CGI/perlのエラー

    CGIのテストをしています。 サーバーはUbuntu14.04 htmlで <html> <head><title>HTMLサンプル</title></head> <body> ボタンサンプル<br> <form action="cgi-bin/test.cgi" method="post"> <button type="button">ボタン</button><br> <input type="submit" value="送信"> </form> </body> </html> test.cgi #!/usr/bin/perl system = ("date >> webwrite""); 実行すると End of script output befor heads: test.cgi のエラーで止まってしまいます。 ファイル webwriteは作成されています。 何か、終了処理が必要なもでしょうか?

  • Perlを用いたUNIXコマンド

    初歩的なことだとは思うんですけど、Perlを用いてUNIXコマンドを実行するのと、普通にUNIXコマンドを実行するのはどういった違いがあるのでしょうか。 調べてみたけれども中々それらしい答えが無かったので質問することにしました。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 基礎の基礎

    CGIを勉強しようとネットや本で調べています。 基礎の基礎の「Hello」という文字の表示さえもできません…。 まず「Apache」と「Active Perl」をインストールしました。インストール先は「Dドライブ」です。(Cドライブが結構いっぱいだったので) 「メモ帳」に #!D:/Perl/bin/perl print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title></title></head> <body> hello perl! </body> </html> END と入力し、「hello.cgi」という名前で保存し、「htdoc」フォルダの中の「test」フォルダに保存しました。 そしてブラウザで「http://127.0.0.1/test/hello.cgi」を表示させると #!D:/Perl/bin/perl print \< hello perl! END と表示されるのです。 「hello perl!」と表示させたいのですが、なぜなのでしょうか?ご存知の方教えてください。 ちなみに、ヒアドキュメントを使わなくても、HTMLのタグ以外が見えるような状態になります。

    • ベストアンサー
    • CGI
  • バッチファイルの構文について

    会社の人が作った.batファイルを参考に、自分で勉強しています。 ごく簡単なことですが、質問です。 会社の人が作ったファイルは、コマンドの最後に必ず「:END」「EXIT」と書かれています。 ファイルのコピーなど、構文が一行で済んでいるような簡単なものでも書かれています。 これを書いても書かなくてもbatファイルの動作は同じで、コマンドプロンプトは動作しだい閉じてくれます。 このコマンドは書いてもいいし、書かなくても自動的に実行されるというような類のものなのでしょうか。

専門家に質問してみよう