CGI-BBS > CGI > Perl > Perlの設置でCGIを作ったがエラー500になってしまう。


カレッヂ
カレッヂ


質問者 Jack  投稿日 2004/2/24(火) 16:35:32
ユーザー登録用に以下のCGIを作ってみたのですが、エラー500が出てしまいます。
CGIは「cgi-bin」ディレクトリにあり、「cgi-lib.pl」は「lib」ディレクトリにそれぞれ置いてあります。
初めてのCGIでいきなり難しい事をやっていますが、あきれずアドバイスお願い致します。
サーバーはCGI専用サーバーになっています。



#!/usr/bin/perl5
require '/lib/cgi-lib.pl';
&readParse(*in);

$mode = $in{'mode'};          # &mode: 'make'=入力用、 'check'=チェック用
if( $mode eq 'make' ){        # ユーザー名、パスワード入力用:$mode eq 'make'
    &printform('user登録');   #    ユーザー名、パスワード入力画面表示
}
else{                       # ユーザー名重複有無のチェック用:$mode eq 'check'
    &checkuser(*in);        #    ユーザー名重複チェック(入力ユーザー名、既登録ユーザー名)
}
exit;

#-----------------------------------------------------------------------------------------
# サブルーチンprintFormの定義
#   ユーザー名、パスワード入力用画面表示
#
sub printForm{
    local ($title)=shift(@_);

    print "content-type:text/html\n\n";
    print "<html><head><title>user登録</title></head></body>";
    print "<h3>$title<h3>";
    print "<form name='form' method='post' action='user.cgi'>";
    print "  ユーザー名:<input type='text'      name='user'><br>";
    print "  パスワード:<input type='password'  name='password'<p>";
    print "  <input type='hidden' value='check' name='mode'>";
    print "  <input type='submit' value='登録'>";
    print "</form><p>";
    print "<a href='eshop.html'><トップページへ戻る</a>";
    print "</body></html>";
}
#-----------------------------------------------------------------------------------------
# サブルーチンcheckUserの定義
#    入力ユーザー名は既登録ユーザー名(passwd.txt)と重複していないかどうかチェック
#    重複していない場合:ユーザー名とパスワードをファイル(passwd.txt)へ保存
#    重複していた場合 :その旨の表示をし、ユーザー名、パスワードの再入力
#
sub checkUser{
    local(*in) = shift(@_);
    local($user ,%passws , $cpasswd);
    local($fuser,$fpasswd);
    local(@all  ,$flg);

    $user  =$in{'user'};          # 入力ユーザー名
  $passwd=$in{'passwd'};        # 入力パスワード

  open(FH,"+<passwd.txt")
    || open(FH,"+>passwd.txt");
    #flock(FH,2);
    @all=<FH>;                    # パスワードファイルを全行読み込み
    $flg = "OK";          # 入力ユーザー名受付可否チェックフラグ(初期値="OK")
  foreach $d(@all){
         ($fuser,$passwd)=split(/:/,$d);     # 既登録ユーザー名、パスワード
    if($user eq $fuser){                 # 入力ユーザー名と既登録ユーザー名が一致
      $flg="NO";last;                  # ユーザー名受付不可("NO")
         }
    }
    if($flg eq "OK"){                        # ユーザー名、パスワード保存と登録受け絵付けOK表示
    $cpasswd=crypt($passwd,$user);       # 入力パスワードの暗号化
    seek(FH,0,2);                        # 書き込み位置をファイルの末尾へ移動
    print FH "$user:$cpasswd\n";         # パスワードファイルへ保存

    print "content-type:text/html\n\n";
        print "<html><body>";
        print "<h3>ユーザー登録は受付られました。</h3><p>";
        print "a href='eshop.html>トップページへ戻る</a>";
        print "</body></html>";
    }
    else{                                    # 登録受付不可表示、再入力画面
        &printForm("入力したユーザー名は($user)は既に使われています");
    }

    #Flock(FH,8);
    close(FH);                               # パスワードファイルのclose
}

プロバイダ参照:http://www.asj.ne.jp/users/manual/webctrlpanel/
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:notepad
FTPソフト:
サーバ移転:していない
改造:していない
CGI習熟度:firsttime

回答者 しあわせのツボ  [削除]  投稿日 2004/2/24(火) 17:57:41
1. コピーしてみたところ、あちこちに全角スペースがあるようですが。
2. &readParseではありません。&ReadParseです。

まずはコマンドラインでエラーを突き止める方法を覚えましょう。
質問者 Jack  [削除]  投稿日 2004/2/24(火) 23:06:04
さっそくの回答とアドバイス有難う御座いました。
無理が(自分自身)有るのは分かってました。
再チェックして見ると構文エラーの山でしたから...
もっと勉強してから出直してきます。
有難う御座いました。

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


Web裏技