サーバー上でCGIが思うように動きません。

[上に] [前に] [次に]
[E-Mail] 1999/11/20(土) 07:48:36
CGIでフォームに入力されたURLのチェックをしようと思いまして、
フォームの内容を読みこんだあと、ifを使ったテストをしたんですが、
どうもローカルでは動くもののサーバー上だとダメなんです。

やってることは
protocolのチェックと拡張子のチェックで
if ($url !~ /^http:\/\/|^ftp:\/\//){
          &error('protocol');
          }
elsif ($url !~ /\.html$|\.htm$|\.log$|\.HTML$|\.HTM$|\.LOG$/) {
      &error('expan');
        }

こんな感じです。
他にも$url =~  などもやってるんですが、
なぜか!~の所で引っかかってエラーが出力されます。(サーバーエラーではないです)
ずっとやってたんですが、どうもダメです。

他の処理もおかしいんですが、それはファイルの書きこみの問題なので関係ないような気がします。
取りあえず上の二つをコメントアウトすれば処理終了が出力?されることはされます。
サーバーはInterQでApache/1.3.6(Unix)です。
ローカルではぜんぜん問題ないです。(AN HTTPD,PerlforWin32)

ヒントだけでも良いので教えてください。

Nobu3 1999/11/21(日) 00:41:16
$urlの値を「print」してみて、予想と正しいのかチェックするのが第一ですね。
その際、改行(\rや\n)があるのかもわかると、なおいいかも。

ちなみに、正規表現ですが、
/\.html$|\.htm$|\.log$|\.HTML$|\.HTM$|\.LOG$/

/\.(html?|log)$/i
で、同じ(以上の)文字列に引っ掛かると思います。

[E-Mail] 1999/11/21(日) 01:46:00
回答ありがとうございます。>Nobu3さん

>$urlの値を「print」してみて、予想と正しいのかチェックするのが第一ですね。
やってみました。どうもPOSTがきかなかったみたいです。

もらってきたCGIはPOSTで動いてるんで、サーバーがPOST使えないって訳じゃなく、
またGETでもsub errorが呼び出されてるので、何か根本的に違うのかもしれないですね。
でもローカルではできたってのはサーバーがPOST使えないって事なのだろうか…うーん。

>その際、改行(\rや\n)があるのかもわかると、なおいいかも。
改行、どう言うことだろう…ちょっと考えてみます

それから/\.(html?|log)$/i、これははじめて知りました。
たしかどこかのサイトで最後のgとかiとかの一覧を見たことあるんですが、忘れました。
そろそろちゃんした本を買う時が来たんですかね
取りあえずはいろいろやってみます。解決はまだと言うことで…

1999/11/21(日) 05:10:48
[[解決]]
何かいろいろやってたらPOSTでもできるようになりました。
正規表現でごちゃごちゃ書いてたのでどこかおかしかったのかもしれません…
ただローカルで動いたのがかなり気になるんですが。

取りあえずいろいろprintするってのは参考になりました。
感謝。

[上に] [前に] [次に]