コマンドラインから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でファイルをみてもらったら、
改行のあたりに変なマークが入っていたらしいです。
本当に助かりました。ありがとうございました。
さあ、がんばろっと!