• ベストアンサー

GETのうけとり。

http://127.0.0.1/test2.cgi?jikanst=0&jikanend=24&youbi=0&rinji=0 以上のデータを、取得したいのですが、参文献の通りのつもりなのですが、「サーバーが見つからないか、DNS エラーです。」という表示がでてきます。なぜでしょうか? よろしくお願いします。 #!/usr/bin/perl $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $form{$key} = $value; } $jikanst = $form{'jikanst'}; $jikanend = $form{'jikanend'}; $youbi = $form{'youbi'}; $rinji = $form{'rinji'}; print "Content-type: text/html"; print "$jikanst,$jikanend,$youbi,$rinji";

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

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.8

> 以下がtest.cgiです。なにとぞよろしくお願いします。 ああ、「移行する」って、普通に submit するだけなんですね。 ふ~ん、普通に動いてるCGIは、ある、と。 「サーバーが見つからないか、DNS エラーです。」ってエラーだから、 とりあえず perl のスクリプト以外にも、問題があるのだろうと思って、 色々書いたんですが、スクリプトだけの問題なんですかね。 質問にあったスクリプトの最後の二行を以下のようにしたらどうですか? > print "Content-type: text/html"; > print "$jikanst,$jikanend,$youbi,$rinji"; print "Content-type: text/html\n\n"; print "<html><body>"; print "$jikanst,$jikanend,$youbi,$rinji"; print "</body></html>";

Iam2888
質問者

お礼

おおお、それでできました。感動です。 そんなんで解決できるんですね。やっぱ、perl難しいですねぇ。 ありがとうございます。

その他の回答 (7)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.7

> 初心者は、専門家のおっしゃる意味さえ難解なのですが・・・すみません。 ありゃ、訳の分からないことを書いてしまいましたか m(_ _)m ある CGI から、別の CGI を呼び出すのって、それなりにやり方に悩むところ なのを、さらっと「呼び出して」なんて書いているので、そのあたりのことを 分かっている人なのだと思っちゃいました。 差し支えなければ、test.cgi がどんな感じなのかを書き込んでくれると、 それなりのアドバイスができるかも。 > test.cgi は、http://127.0.0.1/test.cgi として動いてます。 > > # 的を得た答えでしょうか?(T_T) 何も泣かずとも。このサイトは、分からないことがある人が、分かるかもしれない 人に聞くのが主旨なのですから、どうどうと「分からない」という態度でのぞめば 良いのです。 ちなみに、私が聞きたかったのは、そういうことです。 # 一応、現職の計算機屋さんなので、専門家にチェックを入れてますが、 # やっぱり、分からないことは分からないですよ (^^;

Iam2888
質問者

補足

以下がtest.cgiです。なにとぞよろしくお願いします。 #!/usr/bin/perl open(IN,"yasumi.csv")or die "$!"; eval{ flock IN,2; }; @line = <IN>; eval{ flock IN,8; }; close(IN); $cnt = 0; foreach(@line){ ($jikanst,$jikanend,$youbi,$rinji) = split(/\,/,$_); $cnt++; } $a[0]="日曜日";$a[1]="月曜日";$a[2]="火曜日";$a[3]="水曜日"; $a[4]="木曜日";$a[5]="金曜日";$a[6]="土曜日";$a[7]="その他"; $b[0]="通常営業";$b[2]="定期休日";$b[3]="臨時休業"; print<<"EOF"; Content-type: text/html <HTML><HEAD><TITLE>へい!まいど設定</TITLE> </HEAD> <BODY> ~~ 今の設定 ~~<br><br> 【開始時刻】 $jikanst時から<br> 【終了時刻】 $jikanend時まで<br> <br> 【週休設定】 $a[$youbi]<br> 【臨時設定】 $b[$rinji]<br> <BR> <br>~~ 新しい 設定~~ <br> <FORM ACTION="test2.cgi" METHOD=GET> 【開始変更】<SELECT NAME=jikanst><OPTION VALUE=$jikanst SELECTED>変更なし <OPTION VALUE=0> 0時 <OPTION VALUE=1> 1時 <OPTION VALUE=2> 2時 <OPTION VALUE=3> 3時 <OPTION VALUE=4> 4時 <OPTION VALUE=5> 5時 <OPTION VALUE=6> 6時 <OPTION VALUE=7> 7時 <OPTION VALUE=8> 8時 <OPTION VALUE=9> 9時 <OPTION VALUE=10>10時 <OPTION VALUE=11>11時 <OPTION VALUE=12>12時 <OPTION VALUE=13>13時 <OPTION VALUE=14>14時 <OPTION VALUE=15>15時 <OPTION VALUE=16>16時 <OPTION VALUE=17>17時 <OPTION VALUE=18>18時 <OPTION VALUE=19>19時 <OPTION VALUE=20>20時 <OPTION VALUE=21>21時 <OPTION VALUE=22>22時 <OPTION VALUE=23>23時 <OPTION VALUE=24>24時 </SELECT><br><br> 【終了変更】<SELECT NAME=jikanend><OPTION VALUE=$jikanend SELECTED>変更なし <OPTION VALUE=0> 0時 <OPTION VALUE=1> 1時 <OPTION VALUE=2> 2時 <OPTION VALUE=3> 3時 <OPTION VALUE=4> 4時 <OPTION VALUE=5> 5時 <OPTION VALUE=6> 6時 <OPTION VALUE=7> 7時 <OPTION VALUE=8> 8時 <OPTION VALUE=9> 9時 <OPTION VALUE=10>10時 <OPTION VALUE=11>11時 <OPTION VALUE=12>12時 <OPTION VALUE=13>13時 <OPTION VALUE=14>14時 <OPTION VALUE=15>15時 <OPTION VALUE=16>16時 <OPTION VALUE=17>17時 <OPTION VALUE=18>18時 <OPTION VALUE=19>19時 <OPTION VALUE=20>20時 <OPTION VALUE=21>21時 <OPTION VALUE=22>22時 <OPTION VALUE=23>23時 <OPTION VALUE=24>24時 </SELECT><br><br> 【週休変更】<SELECT NAME=youbi><OPTION VALUE=$youbi SELECTED>変更なし <OPTION VALUE=0>日曜日 <OPTION VALUE=1>月曜日 <OPTION VALUE=2>火曜日 <OPTION VALUE=3>水曜日 <OPTION VALUE=4>木曜日 <OPTION VALUE=5>金曜日 <OPTION VALUE=6>土曜日 <OPTION VALUE=7>その他 </SELECT><br><br> 【臨時変更】<SELECT NAME=rinji><OPTION VALUE=$rinji SELECTED>変更なし <OPTION VALUE=1>通常営業 <OPTION VALUE=2>定期休日 <OPTION VALUE=3>臨時休業 </SELECT><br><br>   <input type="submit" value="送信する"><br>   <input type="button" onclick="history.back();" value=" 戻る "> </form> </BODY></HTML> EOF 以下yasumi.csv 0,24,7,0, 要するに、csvデータのHPによる書き換えをしたいのですが。(i-moad含む) もっと、いい方法あったら、ご伝授ください。(質問の趣旨が変わってもかまいません(笑))

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.6

こんにちは、honiyonです。  test.cgiからtest2.cgiを呼び出しているとのことで、test.cgiからtest2.cgiを呼び出す方法に問題があるのかと思います。  アドレスバーに表示されたURL(http://127.0.0.1/test2.cgi?...)を手で打ち込んで実行した場合は正しく表示されますでしょうか?  というわけで、test.cgiからのtest2.cgiの呼び出し方法について検討&質問してみてください(..

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.5

> test.cgiから、GETで、test2.cgiへデータを移行したいのですが test.cgi は、<META> かなんかで、test2.cgi に切り替えるように 動くんですか? で、同じディレクトリにあると。 使っているのは unix 系のOSで、http は Apache ですか? 念の為、test2.cgi の実行権限を見直してみてください。 ちなみに、test.cgi は、http://127.0.0.1/test.cgi として 動かしているのですよね? # よく分からんです (^^;

Iam2888
質問者

補足

初心者は、専門家のおっしゃる意味さえ難解なのですが・・・すみません。 >test.cgi は、<META> かなんかで、test2.cgi に切り替えるように >動くんですか? >で、同じディレクトリにあると。 初心者の私にはあんまり意味が理解できません。<META>って関係あるんでしょうか? 環境は、WINme + HTTP Daemon1.33g + perl5 です。 test.cgi は、http://127.0.0.1/test.cgi として動いてます。 # 的を得た答えでしょうか?(T_T)

  • novaakira
  • ベストアンサー率36% (60/164)
回答No.4

下の方々の回答プラス、 #!/usr/bin/perl → #!/usr/local/bin/perl としてみては?

  • inoue64
  • ベストアンサー率29% (334/1115)
回答No.3

>サーバーが見つからないか、DNS エラーです パソコンにサーバのソフトを立ち上げていない場合は、 プログラムの実行は出来ません。 ↓Windows用のサーバのソフトの一例

参考URL:
http://www.vector.co.jp/soft/win95/net/se044252.html
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

あなたは、この test2.cgi をどこに置いたのでしょう? > 「サーバーが見つからないか、DNS エラーです。」という表示がでてきます。 の表示の通り、ブラウザにサーバが分からないんです。 > http://127.0.0.1/test2.cgi?jikanst=0&jikanend=24&youbi=0&rinji=0 ********* の部分の問題で、Perl のレベルの問題ではないです。 Content-type: 行の出力に問題があるのは、No.1 の回答の通り。

Iam2888
質問者

補足

 私のPC内にて、ローカールサーバを立ち上げて使用してます。 test.cgiから、GETで、test2.cgiへデータを移行したいのですが、 test.cgiは、問題なく作動し、http://127.0.0.1/test2.cgi?jikanst=0&jikanend=24&youbi=0&rinji=0と、アドレスバーにも表示されます。 ちなみに、test.cgiとtest2.cgiは、同じフォルダに入ってます。  やっぱり、perlがおかしいのでしょうか?

  • inoue64
  • ベストアンサー率29% (334/1115)
回答No.1

Content-typeなどのヘッダ情報を書き出したあとは、 空白行を入れてください。 例:print "Content-type: text/html\n\n";

参考URL:
http://tohoho.wakusei.ne.jp/wwwcgi3.htm
Iam2888
質問者

お礼

さっそくありがとうございます。 まったくそのとおりですね(笑)

関連するQ&A

  • UTF-8から送信されたデータを日本語化するには?

    %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A これを あいうえお に変換するには、どのようにデコードすればいいのでしょうか? ご教授お願いします。m(_ _)m [現在のソース] $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; my $value = Jcode::convert($value, 'utf8'); $FORM{$name} = $value; } ↓ 「縺ゅ>縺・∴縺・」が検出されます。

    • ベストアンサー
    • Perl
  • "ー"を含むとサーバーエラーになる

    HTMLのShift_JISに合わせて、Jcode.plで日本語コード変換のeucをsjisに変更したのですが、"ー"が$FORM{'key'}に含むとサーバーエラーになります。 どうしたら、sjisで"ー"など一部文字でエラーなく処理できるのでしょうか? アドバイスお願い致します。 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $name2 = $name; $value2 = $value; $FORM2{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); #←ここを変更

    • ベストアンサー
    • CGI
  • Jcode.plを使用してコンバート

    if($ENV{\'QUERY_STRING\'} eq \"\"){ read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'}); }else{ $buffer = $ENV{\'QUERY_STRING\'}; } @pairs = split(\'&\',$buffer); foreach $pair (@pairs) { ($name, $value) = split(\'=\', $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg; &jcode::convert(\\$value,\'sjis\'); $form_data{$name} = $value; } Getメソッドで文字「?a=あ」をperlのJcode.plを使用してコンバートしましたが、 ブラウザのURL表示部は「?a=%82%A0」となり、shift_jisの16進数表示されてしまいます。 クッキーに取り込んで表示しても??と表示されてしまいます。 何かしら変換しているみたいのですが、 変換方法はあってるのでしょうか?

    • ベストアンサー
    • Perl
  • 半角カナを検出したい

    フォーム入力の半角カナを検出または全角に変換したいです。 ここで同じような質問をいくつかみて、いろいろ試しましたが どうもうまくいきません。 jcode.pl,v 2.6です。 デコード部分は以下のようになってます。 #!/usr/bin/perl require 'jcode.pl'; print "Content-type: text/html\n\n"; $request_method=$ENV{'REQUEST_METHOD'}; if($request_method eq "POST"){ read(STDIN,$query_string,$ENV{'CONTENT_LENGTH'}); }else{ $query_string=$ENV{'QUERY_STRING'}; } @pairs=split(/&/,$query_string); foreach $pair(@pairs){ ($key,$value)=split(/=/,$pair); $key=~ tr/+/ /; $key=~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($1))/eg; &jcode'convert(*key,'sjis'); $key=~ tr/,/_/; $value=~ tr/+/ /; $value=~ s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($1))/eg; &jcode'convert(*value,'sjis'); $value=~ tr/,/_/; $input{$key}=$value; } よろしくお願いします。

    • ベストアンサー
    • Perl
  • if文を使用すると表示されません。

    フォームに年月日を入力してもらい、下記のスクリプトで 入力画面を表示させようとしています。 年月日を入力するフォームにはhiddenをいれ、if文でサブルーチン &newFormを表示させようとしているのですが、うまくいきません。 <input type=hidden name=mode value="data"> if文を使用せずに、&newFormを直接呼び込むと表示するのですが・・・。 ぜひご教授願えればと思います。 よろしくお願いします。 ===================================================================== &query; # 初期設定 if($in{'mode'} eq "date"){ &newForm; } sub newForm{ print"Content-type:text/html\n\n"; print <<EOF; <html> <head> <title></title> </head> <body> <textarea name="diary" rows="30" cols="70"></textarea><br> <input type="submit" value="書き込み"> </body> </html> EOF } sub query{ $ENV{'REQUEST_METHOD'}=~ tr/a-z/A-Z/; if ( $ENV{'REQUEST_METHOD'} eq "POST" ){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else{ $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } }

    • ベストアンサー
    • CGI
  • safariで買い物かごに残らない

    ある買い物カゴCGIを使用していますがsafariだと日本語表記の商品だけ買い物カゴに入れても残りません。 次の買い物をしたり買い物カゴを確認した時に入っていません。英数表記の商品は大丈夫です。 CGIそのものが古いので替えるのがベストなんですが、諸事情により当面これを使用しなければいけないので何とか御教授お願い致します。 多分下記の部分が問題だと思うのですがCGIなどは全くの素人なので分かりやすくお願い致します。 *********************************************************** if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # 記録するデータはsjisに統一する &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/://g; $value =~ s/,//g; $FORM{$name} = $value; } $soryo = $FORM{$soryo}; #--------# $cookies = $ENV{'HTTP_COOKIE'}; @cookie_pairs = split(/;/,$cookies); foreach $cookie_pair (@cookie_pairs) { ($name, $value) = split(/=/, $cookie_pair); $name =~ s/ //g; $DUMMY{$name} = $value; } $goods_next = 0; foreach $goods_num (1 .. $#cookie_pairs + 1) { $cookie_name = 'CARGO_'.$goods_num; if ($DUMMY{$cookie_name} =~ /^goods:/ || $DUMMY{$cookie_name} =~ /^removed/) { $GOODS[$goods_num] = $DUMMY{$cookie_name}; $goods_next = $goods_num + 1; } } #--------# ***********************************************************

    • ベストアンサー
    • CGI
  • デコード処理について

    sub decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$name} = $value; } while (($k,$v) = each %in) { $v =~ s/&/&amp;/g; $v =~ s/</&lt;/g; $v =~ s/>/&gt;/g; $v =~ s/"/&quot;/g; $in{$k} = $v; } } 上記の処理が、具体的にどうなっているのかよくわかりません。 どなたか分かる方、説明をお願いします。

  • 掲示板を作りたい

    perlを勉強中です 掲示板に挑戦してみました 引用の文字色を変えたいと思っています。下記のように>>をいれるとその行の文字色を改行まで変えたいです >>引用文 しかし、やってみると、他の置換えがあってうまくいきません。 どうすればうまくいくのでしょうか? よろしくお願いします sub form_decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); } else { $form = $ENV{'QUERY_STRING'}; $NG = 1; } @pairs = split(/&/,$form); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $value =~ s/>(&gt;[^<]*|>[^<]*)/&gt;&gt;<font color=\"red\">$1<\/font>/g; $value =~ s/>/&gt;/g; $value =~ s/</&lt;/g; $value =~ s/\r//g; $value =~ s/\n//g; &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); $FORM{$name} = $value; } }

    • ベストアンサー
    • Perl
  • 半角スペースが有効にならない。

    前のページで入力された値を取得するCGIですが、どうしても半角スペースを認識しません。 それどころか、半角スペースの後ろを一切消してデータを取得しています。 同じように作成したものはきちんと動いているのに…。 どこが間違ってるかご指摘お願いします。 ---------- #!/usr/local/bin/perl read(STDIN,$buffer,$ENV{'content_length'}); @atai = split(/&/,$buffer); foreach $atais(@atai){ ($key, $value) = split(/=/, $atais); $FORM{$key}=$value; } $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $buffer =~ tr/+/ /; $value =~ tr/+/ /; $key =~ tr/+/ /; print "Content-type:text/html\n\n"; print "$key<BR>\n"; print "<A HREF=./***.cgi>Back</A><BR>\n"; open (FH,">***.log"); @filew="$buffer\n"; print FH @filew; close(FH); exit; ---------- 以上です。よろしくお願いします。

    • ベストアンサー
    • CGI
  • Perl 指定行への書き込み

    #!/usr/bin/perl require './jcode.pl'; $file = "houkoku.txt"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\t//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/^\s+//; $value =~ s/\s+$//; $FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value; } open( WRITE, "+< $file" ); print WRITE $FORM{'name'},",",$FORM{'color'}."\n"; close(WRITE); foreach ( keys %FORM ) { if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; } } #if ( $FORM{'name'} eq '' ) { $FORM{'name'} = '入力がありません'; } if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; } print "Content-Type: text/html\n\n"; print <<END_HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <center> <table border="1"> <td> $FORM{'name'}</td> <td> $FORM{'color'}</td></tr> </table> </center> </body> </html> END_HTML exit; として、カンマ仕切りでデータを保存できるようになりました。 これを、指定行への書き込みを行いたいのですが、どのようにしたら良いでしょうか。 たとえば、5行目にこのデータを書き込んで、常に5行目を上書き更新するような感じです。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう