![]() |
カレッヂ |
質問者 rannko
投稿日 3/31(日) 01:07:42
index.htmlを経由してからじゃないと、次のページが開かないようにしたいのですが、うまくいきません。(index.htmlからopen.cgiを起動させprivate failの中のa.htmlを開きたい) 一応、「CGIでパスワード制限」を参考にして次のような構成にしています。 何方かアドバイスして頂けないでしょうか。 # |-index.html # | # |-cgi-bin # | |-- open.cgi # | # |-private # | |-- a.html # | |-- b.html # | |-- c.html # | |-- d.html index.htmlの内容 <html> <head> <title>open file</title></head> <form action="open.cgi" method=post> <select name="target"> <option value="a.html">ページA <option value="b.html">ページB <option value="c.html">ページC <option value="d.html">ページD </select> <input type=submit> </form> <p> </body> </html> open.cgiの内容 #!/usr/local/bin/perl $private = '../../private'; $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; $FORM{$name} = $value; } $target = $FORM{'target'}; print "Content-type: text/html\n\n"; open(HTML,"$private\/$target"); |
回答者 まさ
[削除]
投稿日 3/31(日) 09:41:53
<form action="open.cgi" method=post> とこういう風にしているのなら、 $buffer = $ENV{'QUERY_STRING'}; ではなく、 read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); でしょう。 あるいは method=GET に変えるとか。 それにこのスクリプトは open(HTML,"$private\/$target"); で終わってるのでしょうか? printしなくていいのですか? |
質問者 rannko
[削除]
投稿日 3/31(日) 23:55:12
レスありがとうございます。 <form action="open.cgi" method=post>を <form action="open.cgi" method=GET>に修正します。 それと、 open(HTML,"$private\/$target"); 以降なのですが、正直どうしていいのかわかりません。 教えて頂けないでしょうか。 |
回答者 まさ
[削除]
投稿日 4/1(月) 10:18:02
open以降はいろいろとやり方があると思いますが、こんなのはどうでしょう。 open(HTML,"$private\/$target"); @html = <HTML>; close(HTML); print @html; これでダメですか? |
質問者 rannko
[削除]
投稿日 4/1(月) 14:12:56
おかげさまで解決致しました。 たいへんありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |