コマンドラインからcgiをテストするとエラー

[上に] [前に] [次に]
みっちー [E-Mail] 1998/12/07(月) 11:56:55
すばらしいHPですね。
早速質問なのですが、telnetでコマンドラインからcgiをテスト
しようとすると、「引き数リストが長過ぎます」という
メッセージが出てしまいます。
このような場合、どう対処すればよろしいのでしょうか。
当方、cgi初心者で、このような質問はぶしつけにあたるのかも
知れませんが、どなたかになにかを示唆いただければ嬉しいです。

なお、ライブラリとして、cdromからもらったファイルを使ってます。

B-Cus 1998/12/07(月) 16:03:32
まず、情報が不足しています。

> telnetでコマンドラインからcgiをテストしようとすると

どういうCGIスクリプトをどのようにテストしたんでしょうか。

> 「引き数リストが長過ぎます」

ほんとに「引き数リストが長過ぎます」と表示されましたか?
# 意訳してないですか?

あと、シェルがエラーを出しているのか、スクリプトの中で
エラーになっているのかがわからないので、できればソース
を見せていただけると解決につながるかもしれません。

あと、一般的に「telnetして実行」と「CGIとして実行」の違いとして、
・実行ユーザが違う
・カレントディレクトリが違う
・環境変数が違う
・(GETならGET、POSTならPOSTに相当する)引数を渡してない
という点がはまりやすいかと思います。

みっちー 1998/12/07(月) 16:17:55
情報不足なのにコメントしていただき、ありがとうございます。
反省しています。
えー、ソースです。

#!/usr/sbin/perl
print "Content-type:text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>apple</TITLE>\n</HEAD>\n<BODY>";
print "konnitiwa";
print "</BODY>\n</HTML>";



>ほんとに「引き数リストが長過ぎます」と表示されましたか?
># 意訳してないですか?

はい。そのとおりに出ます。
perlのパスは上記で間違いないです。
パーミッションも755に設定しました。
カレントディレクトリは、CGIファイルのあるディレクトリで、
コマンドとして、
./test.cgi
と入力しています。(test.cgiという名前です。)
-wcで文法をチェックすると、OKが出ます。
変数は使っていないです。

みっちー 1998/12/07(月) 16:22:26
(続き)
さきほど、"変数は使っていない"といいましたが、
コレは実験するために大変簡単なCGIをかいたので
使っていないのです。
(最初に質問させていただいた時点では、ライブラリを使っていました。
ので、当然変数もありましたが)
しかし、最も単純なこのようなスクリプトでも、
引き数リストが長過ぎます
と出てしまうのです。

B-Cus 1998/12/07(月) 17:51:39
ん〜、ん〜、ん〜〜〜〜〜〜

このスクリプトでうまくいきませんかぁ…。
別に問題ないように見えますが…。
# test.cgiはCGIとしては動作するんですよね?

 % cp test.cgi test.txt
として、URLを教えていただけませんか?

僕が疑っているのは、改行コードが\nではなく、何か別のコードになっていて、
 #!/usr/sbin/perl print "Content-type:text/html\n\n"; print ....
として認識されてしまい、シェルによって(日本語モードになっているので)
 引き数リストが長過ぎます
とエラーとなってしまう…とか。うーん、でも何か違うっぽいなぁ。

どうもperl以前の段階でエラーになっているような…。

このスクリプトは動きますか?(telnetで)
 #!/bin/sh
 echo "test ok."

これはどうですか?
 #!/usr/sbin/perl
 print "test ok.\n";

また、コマンドラインから
 % /usr/sbin/perl -e 'print "test ok\n";'
とすると動きますか?

みっちー 1998/12/07(月) 18:25:41
B-Cusさん、かさねてありがとうございます。

> % cp test.cgi test.txt
>として、URLを教えていただけませんか?

お教えします。
http://www.st-kwhr.co.jp/cgibook/test.text
です。

>また、コマンドラインから
> % /usr/sbin/perl -e 'print "test ok\n";'
>とすると動きますか?

なんと\の入力の仕方がわからず、"\n"なしで入力したら
print出来ました。(すみません初心者で。)
改行コードの問題なのでしょうか。

ちなみに
 echo "test ok."
は大丈夫、
 #!/usr/sbin/perl
 print "test ok.\n";
はダメでした。



B-Cus 1998/12/07(月) 18:45:47
> http://www.st-kwhr.co.jp/cgibook/test.text

お、まさに

> 僕が疑っているのは、改行コードが\nではなく、何か別のコードになっていて、

これですね。なかなかやるな<おれ(自画自賛(笑))


えっと、UNIXでは改行は\nです。しかしこのスクリプトは
改行部分が\rになってます(お使いのOSはMacだからでしょうか?)。

というわけで、ftpの際にbinary modeで送っていませんか?
ascii modeにすれば \r→\n の変換が自動で行われます。

蛇足ですが、
 % perl -ne 's/\r/\n/g;print;' < test.cgi > new-test.cgi
とすると、new-test.cgiに\rを\nに変換したものが書き出されます。

みっちー 1998/12/07(月) 19:07:50
B-Cusさん、ありがとうございます!

実は今、サーバの管理者にjotでファイルをみてもらったら、
改行のあたりに変なマークが入っていたらしいです。

本当に助かりました。ありがとうございました。
さあ、がんばろっと!

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