お世話になっております。
基本的な事で質問して申し訳ございません。
WindowsServer上のPerlのエラーログにファイルオープンエラーを表示させる方法が知りたい
内でdodox86様よりご助力頂き上記問題は解決したのですが
新たな疑問点が出てきたため質問失礼いたします。
下記のようにPerl内でPOSTやGETデータを取得しております。
perl
1 2if ($ENV{'REQUEST_METHOD'} eq "POST") { 3 read(STDIN, $a, $ENV{'CONTENT_LENGTH'}); 4}else{ 5 $a = $ENV{'QUERY_STRING'}; 6} 7@a = split(/&/,$a); 8foreach (@a) { 9 ($variable,$value) = split(/=/); 10 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 11 if($variable eq "year"){ 12 $year = $value; 13 } 14 if($variable eq "mon"){ 15 $mon = $value; 16 } 17 if($variable eq "title"){ 18 $title = $value; 19 } 20 if($variable eq "bukken"){ 21 $bukken = $value; 22 } 23} 24 25$year =int($year); 26:
IIS上のPerlからでは
URL
1schedule.pl?bukken=yamagata&tab=yamagata&year=2020&mon=7
とデータを取得しています。
でしがデバッグしようとしている
コマンドプロンプト上からでは上記値をどうやって渡すのがスマートなのか
ググっても良く分からなかったので質問してよろしいでしょうか?
QUERY_STRINGに値をいれようと下記のようにしてみたのですが
D:\schedule2>set QUERY_STRING test 環境変数 QUERY_STRING が定義されていません
と表示されます。
お忙しいところ大変申し訳無いのですが上記お問い合わせいたします。
> QUERY_STRINGに値をいれようと下記のようにしてみたのですが
> D:\schedule2>set QUERY_STRING test
回答は控えるつもりですが、ここだけコメントします。先のご質問のコメント欄で私が以下、例示したように、
例: C> SET QUERY_STRING=URLエンコードした文字列
「SET 環境変数名=値」です。"="'が抜けています。コマンドなのですから、ヘルプやリファレンスを確認しましょう。また、基本的にCGIの考え方はLinuxと同じです。
環境変数の設定方法に関する質問なので、Perlタグは不要ですね。
タイトルも引数ではなく環境変数に変更しましょう。
>dodox86さん
本当に度々申し訳ございません。
↓のKojiDoiさんの返答に書いたように
=をつけてやると
```
D:\schedule2>set QUERY_STRING=bukken=yamagata&tab=yamagata&year=2020&mon=7
'tab' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'year' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'mon' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```
となってしまうのです……
>DreamTheaterさん
仰るとおりですね……
前回の流れで作成して失礼しました。
修正しました。
>@ma2hiroさん
> 'tab' は、内部コマンドまたは外部コマンド、
...
> となってしまうのです……
いや、そうではなく、「SET QUERY_STRING=URLエンコードした文字列」
って書いたではないですか。「URLエンコードした文字列」です。GETのURLに含まれるクエリー文字列の"key=value"...はそのままでは環境変数にセットできません。CGIの仕様自体を再度確認してください。正直、そこから確認、理解しないと本問題の解決、ひいてはCGIのデバッグはできないと思います。
老舗のとほほさんのサイトをご案内しておきます。[とほほのCGI入門]http://www.tohoho-web.com/wwwcgi.htm
>@ma2hiroさん
まぁ、"bukken=yamagata&tab=yamagata&year=2020&mon=7"のクエリー文字列に限って言うと、URLは恐らく以下のようなものだとして
http://server/cgi-bin/schedule.pl?bukken=yamagata&tab=yamagata&year=2020&mon=7
CGIに渡されるQUERY_STRING環境変数は以下のようになるはずです。(=は結局、そのまま)
bukken=yamagata&tab=yamagata&year=2020&mon=7
これをSETコマンドでそのままセットしようとしてもうまくいかないので、2重引用符で括るしかないでしょうか。
set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7"
ただ、これをCGIのプロセス内で参照したとき、2重引用符がそのままかもしれないので注意してください。setコマンドのオプションなどを併用しても尚、使えなければ、別の方法を考える必要があると思います。
私の[2020/07/16 10:47]のコメントより引用:
> これをSETコマンドでそのままセットしようとしてもうまくいかないので、2重引用符で括るしかないでしょうか。
> set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7"
> ただ、これをCGIのプロセス内で参照したとき、2重引用符がそのままかもしれないので注意してください。
たびたびすみません、この点だけ確認してみました。SET QUERY_STRING="key=value" と実行すると、環境変数の値としては前後の2重引用符も含まれました。ご注意ください。
dodox86さん
本当に度々ありがとうございます。
> set QUERY_STRING="bukken=yamagata&tab=yamagata&year=2020&mon=7"
とやると"も含まれますので
perlソース内で"は削除するようにして実装してみようと思います。
本当にご助力頂き感謝いたします。
お使いのCGIの全ソースは分かりません(貼られても困ります)が、perlモジュールなどを使ってフォームのパラメータを解析するなどしていた場合、QUERY_STRING環境変数の処理タイミングなどに影響すると思いますのでご注意ください。以上です。
本当にありがとうございました。
またご迷惑をおかけして本当に申し訳ございません。
一刻も早く皆様のお力添えが出来るように技術を学んで参ります。
回答2件
あなたの回答
tips
プレビュー