dポイントプレゼントキャンペーン実施中!

客先サイトのCGIが以下のエラーが出て使用できないといわれました。
■エラーメッセージ
cgi-lib.pl: Unknown Content-type: application/x-www-form-urlencoded; charset=shift_jis

色々と調べていくうちにauの最新機種では
エラーがでるとの解説があったので試してみましたが
同機種が無い為確認できていません。(現在ユーザー様の回答待ちです)

しかし、どうも腑に落ちないことがありまして投稿しました。

エラーが出て動作が出来ないといわれた機種が「W54S」

エラー発生時に他のauの機種でも同様の現象が起きているかを
確認したかったのでアクセスログを確認してアクセスされている機種を
調べたところ同じ時期に発売されたであろう機種「W55T」があり
こちらでは問題が発生していないようでした。

機種によって仕様が変わったりするのでしょうか?
また、同じような現象にあって確実な修正方法を
ご存知の方はいらっしゃいますか?

・Perl 5.8.0
・cgi-lib.pl 2.18 ←81行目を修正しています

A 回答 (1件)

0. 情報が抜け落ちています 81行目にあなたがどんな改変を行ったかがわからない。


0a.
携帯のブラウザは百花繚乱、機種で判断してはいけません。
リリースした時期によって実装が違うようです。

1. それでもごり押ししてcgi-pl2.18 1999/02/23(!)(以下.pl) を読んでみました。

考えられる点。
W54SAのブラウザがPOSTデータを吐くときに

POST hogehoge(何かの文字列。この件に関係ない)
Host: foobarhoge (何かの文字列。この件に関係ない)
Content-type: application/x-www-form-urlencoded; charset=shift_jis

とサーバーに返しているようです(憶測)

すると
$type と $ENV{'CONTENT_TYPE'} には
application/x-www-form-urlencoded; charset=shift_jis
が入ります。

本来 「;charset=shift_jis」というのは.plでは望まれていない余計な情報であるため、(82行目の$type eq 'application/x-www-form-urlencoded'を見てください。*この余計な情報がついているとここを通り抜けてしまう)
奇形情報として 80行目から始まるifを通り抜け
117行目の
elsif ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) にもマッチせず
280行目の
&CgiDie("cgi-lib.pl: Unknown Content-type: $ENV{'CONTENT_TYPE'}\n"); でエラーを吐きます。

これがあなたの見ているエラーです。

2a. 望ましい改善策。
CGI.pm がサーバーの条件や、仕事の条件で使えるのであれば
こちらを利用する。(98年に製作された物を使うのは危険すぎる。)
圧倒的に最新であり改善されている可能性があります。

2b. 望ましくない改善策。
付け焼刃ですが、
82行目の

$type eq 'application/x-www-form-urlencoded'

$type =~ m{application/x-www-form-urlencoded}

に変えると尻尾にごみがついていてもとりあえずエラー処理しなくなるはずです。

3. まことに勝手なお願いですが、30分ほど費やした私のために。
もしこれがあなたのお役に立てて給料がたくさんクライアントから頂けたら
お礼ポイントは結構ですので
どんな募金でもOKですのでコンビ二にでも立ち寄られた際に 50円くらい 募金箱に入れていただけ無いでしょうか。

では御健勝をお祈りして。
    • good
    • 1
この回答へのお礼

貴重なお時間を割いていただきありがとうございました。
古いソースを使っているので確かに新しいものには
ついていけないかも知れませんね。。。
CGI.pmを利用することにします
ありがとうございました。

お礼日時:2008/02/12 17:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!