• ベストアンサー

特定のCGIだけ、作動するかわりにダウンロードされてしまいます

いつもお世話になります。 今日、カウンタのCGIと、そのカウンタをセッティングするCGIを二つのサーバに設置したのですが、片方のサーバに設置したセッティングCGIがおかしいんです。 本当ならアクセスするとパスワードを求める画面になるはずですが、「次の場所からダウンロードするように選択しました」という、Windowsではおなじみのダイアログが現れて、そのパスワードを入れるページ自体をダウンロードすることになってしまいます。 ここで「ダウンロード」にせずに「上記の場所から開く」にすればパスワード入力画面は開くのですが、これはローカルディスク上で開いていることになりますから、もちろんCGIとしては作動してくれません。 しかし、こんな現象が発生してしまうのはWin98やWin MEでアクセスした場合で、Macでアクセスすると正常にパスワードを求めてきて、もちろんそのまま認証してカウンタのメンテができます。 また、このWinで正常に作動しないのは2つのサーバに設置した内の片方だけで、全く同じものを全く同じ名前とセッティングでアップしてある、もう一つのサーバ上のCGIはMacでアクセスしようがWinでアクセスしようが正常に作動するのです。 しかも、異常がある方のCGIと同じディレクトリにアップしてある、他のCGIは全て正常に作動するのです。 パーミッションの設定も、CGIは755、ログは666と、間違っていないことを確認してあります。 perlへのパスも、Macでなら動くことでもおわかりのように、間違っていません。 尚、このCGIはDOS-Vの改行コードで記述してあります。 どなたかこの異常の原因がおわかりの方はいらっしゃいませんでしょうか? どうか解決のためのアドバイスをお願いいたします。

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

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.3

 CGIスクリプトそのものではなく,その出力がダウンロードされてくるんですよね。だとすると,一番怪しいのはMIMEタイプ設定なのですが…(MIMEタイプについては,参考URLをご覧ください)。  ダウンロードされるファイルがなんというMIMEタイプとして認識されているか,判らないでしょうか?  Mozilla(おそらく Netscape 6.1 も)などであれば,ダウンロードダイアログに「~ xxxx/yyyy タイプのファイルをダウンロード後~」というように,ダウンロードしようとしているファイルのMIMEタイプが出力されるのですが,IEではどうやればいいのか私は知らないので…。  そのMIMEタイプがわかれば,なぜダウンロードされてしまうのかという原因究明の手がかりになると思うので,できれば調べてみてください。  または,そのCGIスクリプトのなかで,"Content-type: xxxx/yyyy" という文字列を出力しているところがあれば,それがそのMIMEタイプなのですが…。そこによけいな文字(見えない文字~例えば全角空白など~という可能性もあります)が入ってないか,あるいは設定されていないということがないか,調べてみてください。  Macでちゃんと動くのは,ブラウザー側でそのMIMEタイプをどう扱うかがきちんと設定されている,あるいは(こちらの方が可能性は高いのですが)MIMEタイプ判別をルーズに行っている(例えばMIMEタイプの判らないテキストファイルは text/html として扱う),などの理由からではないかと思います。

参考URL:
http://home.tripod.co.jp/help/building/file_mime.html
chack
質問者

お礼

どうもお騒がせいたしました。 atonさんが"Content-type: xxxx/yyyy"という部分を指摘して下さったおかげで、CGIを作った方のタイプミスだということが判明し、解決に至りました。 これから作者の方にも連絡しようと思います。 どうもお世話になりました!

chack
質問者

補足

コメントと参考URLをどうもありがとうございました。 そうなんですか。CGIの中にそういう記述部があるとは知りませんでした。 なるほど!ネスケだとタイプを教えてくれますね。 ダウンロードしようとしているファイルタイプは、application/x-httpd-cgiであると言って来ています。 あれ?CGIの中には「text/html」と記述されているんですが…? 詳しくは、    .    .    . # # HTML文書定型部表示ルーチン # sub header { print <<"HTML"; Conyent-type: text/html <HTML> <HEAD> <TITLE>Control room</TITLE> <META http-equiv="Content-type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY bgcolor="#f1f1f1" text="#000000" link="#0000E3" vlink="#008080">    .    .    . と続きます。 いかがでしょうか? ところで、NetscapeならMIMEタイプが判ると教えて頂いたおかげで、もう一つ発見がありました。 正常と思われていた方のCGIも、Netscapeでアクセスすると出力結果のHTMLソース自体がブラウザに表示されてしまい、やはりパスワード認証は出来ないことが判りました。 これは、やはりCGIの構造の問題でしょうか? 作者の方がアップしていらっしゃるサンプルのページは、MacでもWinでも、IEでもNCでも正常に動いてしまうんで、私の詳細設定法が悪いのかと思い、作者の方がアップされた圧縮ファイルを解凍したそのままのものを私のサーバにアップしてみた(偶然、perlのパスは書き替える必要がなかったので)のですが、それでもやはりダウンロードが始まってしまったりソースが表示されてしまう現象は変わりませんでした。 私の方に問題があるのかと思ってこちらで質問させていただいたのですが、もしかしてこれはCGIの作者の方に質問すべき内容なのでしょうか? う~ん、面倒な問題にお付き合いいただいて申し訳ありません。この結果に対する更なるご意見を伺えればありがたいのですが…

その他の回答 (3)

  • makito
  • ベストアンサー率21% (3/14)
回答No.4

見た瞬間、ちょっと笑ってしまいました。 もし下の補足が、コピペだとしたら、コレが原因だったのでしょう。 >print <<"HTML"; >Conyent-type: text/html Conyent-type:・・・・・ 間違い探しですネ。もしコレが原因じゃないとすれば、もはや私には分かりません。。。。

chack
質問者

お礼

お答え頂きましてどうもありがとうございました! ホ、ホントだー、大正解です!! そうなんです。コピペで入れたものです。 これを直したら全て問題がなくなりました。 どうもお世話になりました!

  • makito
  • ベストアンサー率21% (3/14)
回答No.2

違うと思うのですが、万が一と言う事がありますので、載せておきます。 そのDLするか聞いてくる方のサーバーでは、もしかしたら「.httacces」という拡張子ごとの設定を行うファイル が必要なのかもしれません。 だいぶ前の話ですが、私はそれを置いた記憶があります。 最近はめっきり見ませんが。。。 それだと何故MacではDLするか聞いてこないかという事になりますが、どうでしょう。。。 まぁ、万が一の可能性って事で、サーバー管理者に聞くなり、ちょっと調べて見てください(^^; あまりお役にたてなくて申し訳ないです。

chack
質問者

お礼

アドバイスをどうもありがとうございます。 .htacsessですか。どういうファイルかは今日まで知りませんでしたが、名前は聞いたことはありました。 その名前をキーワードにサーチエンジンで検索したところ、記述の方法が載っていたので実際にやってみたんですが、そのファイル、問題のサーバにアップすると、数10秒後に自動的に削除されてしまうみたいで、 「あれ~?やっぱりダメだなぁ」と再度確認のためにftpソフトでアクセスしてみたら無くなってしまっていました。妙な構造のサーバなのか何なのか… そうですね、最終的にはサーバーの管理の方に聞くしかないのかもしれませんね。 >あまりお役にたてなくて申し訳ないです。 とんでもないです。何もお答えが頂けないと、ますます頭を抱えることになりますから、何かしらお心当たりをお聞かせ頂けるのはとても嬉しいです。 どうもありがとうございました!

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.1

CGIはperlですか? もしそうでしたら、記述先頭行を確認してください。 (#!/usr/bin/perl とか) この記述が、サーバ側のperl実行パスとあっていない事はありませんか?

chack
質問者

お礼

早々のお答えをどうもありがとうございます。 問題のCGIがアップしてある「cgi-bin」ディレクトリには5つのCGIがアップしてあるのですが、どのCGIも全てサーバー設定マニュアル通り、#!/usr/local/bin/perl5と記述してあります。 万一の打ち間違い見逃しを考え、他のCGIからコピー&ペーストして再アップもしてみたのですが、状況は変わらないんです。 また、これらのCGIは全てperl5用なので、perlのバージョン違いということも考えられません。 何せ、Macでアクセスすれば動くわけですし…