CGI-BBS > CGI > Perl > 「サーバーの指示どうりに設定しているのに成功しません」の続き


カレッヂ
カレッヂ


質問者 富嶽  投稿日 1/13(土) 22:32:32
MS-DOSプロンプトでテストした結果、
以下のメッセージが表示されました。
Name "main::isdst" used only once: possible typo at BOT.cgi line 28.
Name "main::year" used only once: possible typo at BOT.cgi line 28.
Name "main::yday" used only once: possible typo at BOT.cgi line 28.
BOT.cgi syntax OK

転送はアスキーで行いました。
パーミッションも
CGIは、705
datは、606
jcode.plは、604
としました。

prelへのパスはサーバーの指示どうりに設定しましたし、
「ホームページビルダー」についていたCGIは、作動していますので…

わたしとしては問題ないと思うのですが…
これが、ずーとつづいています。
回答者 まさ  [削除]  投稿日 1/14(日) 07:12:40
> MS-DOSプロンプトでテストした結果、
> 以下のメッセージが表示されました。
> Name "main::isdst" used only once: possible typo at BOT.cgi line 28.
> Name "main::year" used only once: possible typo at BOT.cgi line 28.
> Name "main::yday" used only once: possible typo at BOT.cgi line 28.
> BOT.cgi syntax OK

Name〜のWarningはスクリプト内で一度もその変数が使われていないということなので
気持ち悪くなければ、そのままにしていても問題はないです。
とにかくSyntax OKが出ればいいです。
それで文法的な間違いがないことがわかりました。
しかし動く保障はされてませんけど。

> 転送はアスキーで行いました。
> パーミッションも
> CGIは、705
> datは、606
> jcode.plは、604
> としました。

そのパーミッションはお使いのプロバイダーでは問題ないのですね。

> prelへのパスはサーバーの指示どうりに設定しましたし、
> 「ホームページビルダー」についていたCGIは、作動していますので…

わたしなら、ビルダーのCGIと動かないCGIとを比較していきますが。
それと動かないCGIの、問題のありそうな部分に

print "Content-type: text/html\n\n";
exit;

を挿入して、どこまでなら正常で、どこからがエラーが出るか徐々に追い
詰めて行きます。

わたしの体験ですが、随分前に、同じようにエラーが出て原因がわからず
悩んでいました。
しかしexit;で止めてエラーが出るか出ないかを確認していくと意外なとこ
ろでスクリプトが落ちてました。

普通open関数は以下のように書きます。
if (!open(DB,"$file")) { &error; }
しかしわたしは
open(DB,"$file") || die $!;
としていました。
そしてそのファイルのオープンに失敗していました。
これではオープンに失敗したとき、ヘッダーがないので、エラーが出ます。
このようなことはperl -wcではわかりません。文法的には正常ですからね。

exit;で止めて調べるのが、原始的ですが、いざと言うときは一番早いです。
質問者 富嶽  [削除]  投稿日 1/16(火) 16:53:43
if (!open(DB,"$file")) { &error; }
出ないといけない事を、
どのような方法で、つきとめたのですか?
回答者 まさ  [削除]  投稿日 1/16(火) 17:26:43
それはまだわたしがPerlをやり始めて間もないことの出来事です。

文法チェックではOK。しかしエラーが止まらない。
そこで
print "Content-type: text/html\n\n";
exit;
でエラーの出てる場所を特定しました。そこが
open(DB,"$file") || die $!;
でした。

次にこいつを眺めていると、openに失敗していることがわかりました。
失敗すれば、die $!;が実行されます。しかしそこにはヘッダーがあり
ません。よってエラーが出てることが確認できました。

よって
if (!open(DB,"$file")) { &error; }
に修正し、関数errorの中でヘッダーを出力すれば、エラーはなくなり
ました。

ですから、
print "Content-type: text/html\n\n";
exit;
これでエラーのもとを突き止めるのは、原始的ですが、一番早いと思い
ます。
質問者 富嶽  [削除]  投稿日 1/17(水) 17:05:03
オープンに成功しました!!!!!!!!!!!!
これで5ヶ月にわたるCGIとの戦いが終わりました。

オープンしなかった原因は…
ファイル名の書き方に有ったようです。
CGIなかで使用するファイル名が同じ名前でも大文字・小文字が違うと、
別のファイルとして認識してしまうのです。

私は自機にPerlをインストールしてCGIの作動を確認していましたが、
Windwsはファイル名に大文字・小文字は区別しないので作動していたようです。
しかし、サーバのOSはUNIXでファイル名の大文字・小文字は区別するそうです。
(拡張子も含みます)

だから、ファイル名は大文字か小文字かに統一した方がいいかもしれない。

文では異常はなかったみたいです。
ご相談になった方に心から感謝いたします。

このページは終了したので返信(回答)は書きこめません

Web裏技