サポート掲示板

記事が属するツリーの記事を全て表示します 【13217】CGIが作動しません naonao 07/10/23(火) 19:52 質問

【13220】使用しているスクリプトは? 小村大樹 07/10/24(水) 14:12
【13222】Re:使用しているスクリプトは? naonao 07/10/24(水) 15:24 質問
【13223】Re:使用しているスクリプトは? Mr男爺 07/10/24(水) 16:08
【13224】すみません Mr男爺 07/10/24(水) 16:13
【13225】Re:すみません naonao 07/10/24(水) 16:28 質問
【13226】Pchecker… wtz 07/10/24(水) 17:45
【13232】Re:Pchecker… naonao 07/10/25(木) 10:43 質問
【13233】Re:Pchecker… naonao 07/10/25(木) 16:30 答え
【13235】よかったですね。(おまけ) wtz 07/10/25(木) 19:06
【13239】Re:よかったですね。(おまけ)のお返事 naonao 07/10/26(金) 8:58

 小村大樹 E-MAIL  - 07/10/24(水) 14:12 -
パスワード
「Internal Server Error」は、
スクリプトに何か問題があれば、
とりあえず出てくるエラーです。

さしあたり、編集したときに、
行末の" ; "が抜けてしまったとか、
perlのバージョンや環境、
転送時の文字コード等が違うので、
実行できないなどが考えられますが、
…残念ですが、提示されている情報だけでは、
何が問題か分かりません。

使用しているスクリプトを書いていただければ、
レスが付くかも知れません。

ところで、リンク先のページですが、
作りかけ…ということでしょうか?
丁寧に作り込まれているようですが、
IE以外のブラウザで表示すると、
表示が乱れてしまうようですので、
確認されることをお勧めします。
引用なし
質問  naonao E-MAILWEB  - 07/10/24(水) 15:24 -
パスワード
レス、ありがとうございます。
CGI初心者でKENTさんの「CGI/Perl作り方入門」に
かぶりつきながら頑張っています。

換えたところは、Action属性とコマンドのパス(perl5・sendmail)のみです。
ローカルでは動いたので、「;」抜けとかではないと思うのですが・・・。
長々とすみません。

他ブラウザで見ると表示が乱れるとのこと。
情報ありがとうございます。
何とか調節してみます。

#!/www/bin/perl5

# ライブラリー取り込み
require './jcode.pl';

# 戻り先のリンク
$backurl = '●●';

# 送信先アドレス
$mailto = '●●';

# 管理者先アドレス
$amailto = '●●';

$title = 'お問合せ';
$ktitle = '【お問合せ】確認メール';

# sendmailパス
$sendmail = '/www/bin/sendmai';

# フォームデコード
&decode;

# メール送信
if ($in{'mode'} eq "sendmail") { &sendmail; }

# 確認画面
&preview;

#-------------------------------------------------
# フォームデコード
#-------------------------------------------------
sub decode {
    if ($ENV{'REQUEST_METHOD'} eq "POST") {
        read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
    } else {
        $buf = $ENV{'QUERY_STRING'};
    }

    undef(@key);
    undef(@val);
    undef(%in);
    my @buf = split(/&/, $buf);
    foreach (@buf) {
        my ($key, $val) = split(/=/);
        $key =~ tr/+/ /;
        $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
        $val =~ tr/+/ /;
        $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

        # SJISコード変換
        &jcode::convert(\$key, 'sjis');
        &jcode::convert(\$val, 'sjis');

        # エスケープ
        $key =~ s/&/&/g;
        $key =~ s/"/”/g;
        $key =~ s/</</g;
        $key =~ s/>/>/g;
        $val =~ s/&/&/g;
        $val =~ s/"/”/g;
        $val =~ s/</</g;
        $val =~ s/>/>/g;

        # 改行はタブへ変換しておく
        $val =~ s/\r\n/\t/g;
        $val =~ s/\r/\t/g;
        $val =~ s/\n/\t/g;

        # 入力内容を@key, @valに代入
        push(@key,$key);
        push(@val,$val);

        $in{$key} = $val;
    }
}

#-------------------------------------------------
# 確認画面
#-------------------------------------------------
sub preview {
    # 必須の入力項目を配列化(@needに代入)
    my @need = split(/,/, $in{'need'});

    # 入力内容をチェック
    my $err;
    foreach my $need (@need) {
        if ($in{$need} eq "") {
            $err .= "$needが未入力です<br>\n";
        }
    }

    # 入力不備があればエラー表記
    if ($err) {
        &header;
        print"<center><img src=\"/tanimail/modoru.gif\"></center><br><br>\n";
        print "<center><font color=\"#ff0000\">$err</font></center><br><br><br>\n";
        print '<center><input type="button" value=" 戻 る " onClick="history.back()"></center>';
                print "</body></html>\n";
        exit;
        
    }
    # 確認画面表示
    &header;
    print <<EOM;
<p align="center"><img border="0" src="/tanimail/midle.gif"></p>
<form action="http://cgi1.synapse.ne.jp/~●●/tanimail/toiawase.cgi" method="post">
<input type="hidden" name="mode" value="sendmail">
<center><table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#555FAA">
<tr>
 <td><p align="center"><b>項目</b></p></td>
 <td><p align="center"><b>入力内容</b></p></td>
</tr>
EOM

    # 入力内容
    foreach my $i (0 .. $#key) {

        # needはスキップする
        if ($key[$i] eq "need") { next; }

        # 入力内容をhiddenフィールドにセット
        print "<input type=\"hidden\" name=\"$key[$i]\" value=\"$val[$i]\">\n";

        # 改行変換(タブ → <br>)
        $val[$i] =~ s/\t/<br>/g;

        # テーブルセルで表示
        print "<tr><td>$key[$i]</td>";
        print "<td>$val[$i]<br></td></tr>\n";
    }

    print <<EOM;
</table></center>
<br><br>
<p align="center"><input type="submit" value="送信する">
<input type="button" value=" 戻 る " onclick="history.back()"></p>
<br><br>
</form>
</body>
</html>
EOM
    exit;
}

#-------------------------------------------------
# メール送信
#-------------------------------------------------
sub sendmail {
    # タイムゾーン設定
    $ENV{'TZ'} = "JST-9";

    # 日時
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my $now = sprintf("%04d/%02d/%02d-%02d:%02d",
                $year+1900,$mon+1,$mday,$hour,$min);

    # メール本文
    my $mailbody = "以下のとおりフォームメールより送信がありました。\n\n";
    $mailbody .= "送信日時 = $now\n";

    foreach my $i (0 .. $#key) {

        # modeはスキップ
        if ($key[$i] eq "mode") { next; }

        # 改行変換(タブ → \n)
        $val[$i] =~ s/\t/\n/g;

        # メール本文
        $mailbody .= "$key[$i] = $val[$i]\n";
    }

    # JISコード変換
    &jcode::convert(\$mailbody, 'jis');
    &jcode::convert(*title, 'jis');
    &jcode::convert(*ktitle, 'jis');

    # sendmail起動
    open(MAIL,"| $sendmail -t -i");
    print MAIL "To: $mailto\n";
    print MAIL "From: $mailto\n";
    print MAIL "Subject: $title\n";
    print MAIL "MIME-Version: 1.0\n";
    print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
    print MAIL "Content-Transfer-Encoding: 7bit\n\n";
    print MAIL "$mailbody\n";
    close(MAIL);
    

    # sendmail起動
    open(MAIL,"| $sendmail -t -i");
    print MAIL "To: $amailto\n";
    print MAIL "From: $amailto\n";
    print MAIL "Subject: $title\n";
    print MAIL "MIME-Version: 1.0\n";
    print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
    print MAIL "Content-Transfer-Encoding: 7bit\n\n";
    print MAIL "$mailbody\n";
    close(MAIL);

    # sendmail起動
    open(MAIL,"| $sendmail -t -i");
    print MAIL "To: $in{'mail'}\n";
    print MAIL "From: $mailto\n";
    print MAIL "Subject: $ktitle\n";
    print MAIL "MIME-Version: 1.0\n";
    print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
    print MAIL "Content-Transfer-Encoding: 7bit\n\n";
  print MAIL "お問合せありがとうございました。\n";
    print MAIL "$mailbody\n";
  print MAIL "一週間以内にお返事を致します。\n";
    print MAIL "******************************************\n\n";
    
    close(MAIL);


    # 完了メッセージ
    &header;
    print <<EOM;
<p align="center"> </p>
<p align="center"><img border="0" src="/tanimail/end.gif"></p>
<br>
<br>
<p align="center"><a href="$backurl"><img border="0" src="/tanimail/home.gif"></a></p>
<br>
<p align="center"> </p>
<br>

<br>

</body>
</html>
EOM
    exit;
}

#-------------------------------------------------
# HTMLヘッダー
#-------------------------------------------------
sub header {
    print "Content-type: text/html\n\n";
    print <<EOM;
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>お問合せ</title>
</head>
<body background="/tanimail/back.jpg" text="#282828" link="#8DB0FF" vlink="#D08DFF" alink="#D08DFF">
EOM
}
引用なし
 Mr男爺  - 07/10/24(水) 16:08 -
パスワード
スタートページのURLを
http://cgi.synapse.ne.jp/~taniguti/mail.html
とすれば稼動するようです。
テスト文がきていませんでしょうか?
引用なし
 Mr男爺  - 07/10/24(水) 16:13 -
パスワード
http://cgi1.synapse.ne.jp/~taniguti/mail.html
「cgi1」です。
引用なし
質問  naonao E-MAILWEB  - 07/10/24(水) 16:28 -
パスワード
紛らわしいことしてすみません。

実は、自分で作ったCGIがうまくいかなくて、
シナプスさんの「かんたんメールフォーム」を
勉強もかねて使ってみたんです。
それはOKでした。

でも、やっぱり自分で作った物を載せようと思いまして。

http://www.synapse.ne.jp/taniguti/toiawase.html
から入ります。

目下、間違いを探しておりますが、何が間違っているか分からず・・・。
すみませんが、宜しくお願いします。
引用なし
 wtz E-MAILWEB  - 07/10/24(水) 17:45 -
パスワード
Kent さんのサイトをご存知なら PerlChecker もわかりますよね。
(「ユーティリティ」のところにあります。)

で、それでチェックしたところ、
Unrecognized character \x81 at toiawase.cgi line 34.
とでます。しかし私にも原因がわかりません。

それを真似てというか作った私のチェッカーでも
Unrecognized character \201 at ./toiawase.cgi line 34.
とでます。どの文字が邪魔をしているのかわかりませんが。

とりあえず、参考になればいいのですが。
引用なし
質問  naonao E-MAILWEB  - 07/10/25(木) 10:43 -
パスワード
すみません!
PerlCheckerを設置してみたのですが・・・動かず。

換えたところは一行目の
#!/www/bin/perl

2箇所のAction属性です。
print "<form action=\"http://cgi1.synapse.ne.jp/~●●/tanimail/pcheck.cgi\" method=\"POST\">\n";

<form action="http://cgi1.synapse.ne.jp/~●●/tanimail/pcheck.cgi" method="POST">

パーミッションを755にしました。

他に変えるところはありますでしょうか。
宜しくお願いします。
引用なし
答え  naonao E-MAILWEB  - 07/10/25(木) 16:30 -
パスワード
皆様、色々とレス頂き、ありがとうございました。
wtzさんの「文字化け」という言葉が引っかかって、
文字を一つずつ検証してみました。
どうやら「@」が引っかかっていたようです。

もしかして、CGIなら常識!なのでしょうか?
恥ずかしながら知らなかったもので・・・。
前に「¥」を入れて事なきを得ました。

ありがとうございました。
引用なし
 wtz E-MAILWEB  - 07/10/25(木) 19:06 -
パスワード
よかったですね。
私は perl5 はよく知らないんですが、print 文のなかの @ は、配列と解釈されて
その中身が並ぶようです。

それはそれとして、空白文字にインデントを反映させるためには
投稿欄の「等副」を選ぶとよいですよ。
引用なし
 naonao E-MAIL  - 07/10/26(金) 8:58 -
パスワード
ありがとうございました。

動かなくて色々考えて、時間は掛かりましたが、
良い勉強になりました。

「等幅」。
気付かず・・・。
重ね重ねありがとうございます!
引用なし
ページ:  ┃  記事番号:   
(SS)C-BOARD v3.5.4 is Free.