1つだけ過去を変えられるとしたら?

CGI初心者です。
メールフォームは、HPのサンプル版から使いました(市販)。
送信ボタンを押すとエラーになります。プロバイダはOCNです。
http://kataefudousan.jp/contact.html

CGI初心者でよく理解ができません。

http://www.ocn.ne.jp/hosting/usersupport/mw/hp_c …

CGIスクリプトについて説明があります。(OCN)


contact.cgi

#!/usr/lolal/bin/perl
use CGIqw(:cgi-lib :standard);
print header();

# ご使用のサーバの perl コマンドへのパスを1行目(この上)に書いてください。
# 「#!」 の前には空白、改行などを入れないでください。
# わからない場合は、サーバの管理者へお問合わせください。

################################################################
# ご使用時に、この下を編集してください。
################################################################

# sendmail コマンドのパス(サーバ管理者にお問合わせください。)
$SENDMAIL = '/usr/lib/sendmail';

##### メール設定
# 管理者メールアドレス(このアドレスにメールが送信されます。)
$ADMIN_MAIL = 'with-a@u01.gate01.com';

# 管理者名前
$ADMIN_NAME = 'サンプル';

# メールサブジェクト
## ユーザあて
$USER_SUBJECT = 'フォームメールを送信しました。';
## 管理者あて
$ADMIN_SUBJECT = 'フォームからのメールです。';


################################################################
# ご使用時に、この上を編集してください。
################################################################

A 回答 (3件)

私もCGIについて、詳しくないのですが・・・まず、jcode.plとSendMail.plがcgiファイルと同じ階層にあるか確認しましょう。

コチラからだと存在してないように思います。ファイルへの変更ですが、OCNの説明通りに記述するしかないと思います。シェルスクリプト1と2のあたりを確認ですかね。文法チェッカーも用意されてるみたいなので、これも活用しましょう。なにかヒントをもらえるかも。。。。
CGIの設置は本当に面倒ですね。私の場合、編集しては検証の繰り返しで動作を確認してます。サーバーに負担がかかりますので、ローカルで検証してます。ところで、このCGIスクリプトはご自身で書かれたものでしょうか?それとも、どこかで入手されたものなんでしょうか?後者の場合なら、設置方法など書かれてると思うのですが。。。

Internal Server Error(500エラー)は、cgiが動作しないときに表示されます。.や;を間違って1文字消しただけでも返ってくるエラーです。また、cgiが使用する外部ファイルが存在しないとき、パーミッションが適切な設定になっていないときも吐き出されてきます。

煮詰まらないよう頑張ってください。
http://www.ocn.ne.jp/hosting/usersupport/mw/02.h …
http://www.ocn.ne.jp/hosting/usersupport/mw/hp_c …
http://www.ocn.ne.jp/hosting/usersupport/mailweb …
*ご確認済みでしたらお読み捨てを。。。

この回答への補足

contact.cgiをスクリプトチェッカーにかけたところ↓のエラーがでました。
syntax error at /u/web/kataef/cgi-local/contact.cgi line 2, near "(:"
/u/web/kataef/cgi-local/contact.cgi had compilation errors.

----------------------------------------------------------
#!/usr/lolal/bin/perl
use CGIqw(:cgi-lib :standard);
print header();
----------------------------------------------------------
↓2行目、:を;にしても試しました。
use CGIqw(;cgi-lib :standard);

-----------------------------------------------------------
use CGIqw(:cgi-lib :standard);
print header();

↑この2行はOCNで指定されています。
http://www.ocn.ne.jp/hosting/usersupport/mw/hp_c …

記述は間違ってないように思うんですが・・・

補足日時:2007/01/10 15:08
    • good
    • 0

今度はCGIでお悩みのようですね。

「お問い合せ」のページソースでANo.1の指摘されている<form>のパスが違っているようです。cgi-bin/formmail.plが404エラーになります。
ご質問文とからOCNの説明から「cgi-local/contact.cgi」へアクセスしてみたところ、500エラーになりましたので、cgiファイルはこのパスに存在することになります。が、Internal Server Errorですので、HTMLのパスを書き換えてもメールフォームは動作しません。contact.cgiをOCNのサーバーに合わせて編集してください。

この回答への補足

vista2446様
2回目の回答ありがとうございます!

>contact.cgiをOCNのサーバーに合わせて編集してください。

perlパス、sendmailパスを編集したんですが・・
後はどこを編集したらいいんでしょうか・・・?

補足日時:2007/01/08 01:55
    • good
    • 0

サイトのそのページのソースを見ると


<FORM action="/cgi-bin/formmail.pl" となっていますが cgi-binというフォルダ名、また実行ファイル名formmail.plは正しいのでしょうか。
アップしたファイルとhtmlとを照らし合わせて確認してください。

上のプログラム名はcontact.cgiですよね。
また、OCNの説明を見ると/cgi-bin/フォルダ名でよいのか疑問です。
>4. ブラウザでCGIスクリプトへのパス"http://www.your_domain.co.jp/cgi-local/ファイル名"を直接入力するか、HTMLファイルからのリンクにより起動してください。

設置したいフォームはcontact.cgiだけで完了するプログラムなのか?一連の他のファイルがあるのかこれだけの情報ではわかりません。
セットになっているならすべてのファイルをサーバの指定された場所にあげてやる必要があります。

この回答への補足

回答ありがとうございます。

> <FORM action="/cgi-bin/formmail.pl" となっていますが cgi-binというフォルダ名、また実行ファイル名formmail.plは正しいのでしょうか。

FORM action="/cgi-bin/formmail.pl"
↓修正しました
FORM action="/cgi-local/contact.cgi"

今度はエラー内容が変わりました。
これは、どういうエラーなのでしょうか・・・?

ちなみにプロバイダはOCNですが、私のPCは別プロバイダでアップを行ってますが、それは問題ありませんか?

>設置したいフォームはcontact.cgiだけで完了するプログラムなのか?
↓上記に記載しているcontact.cgiの続きです。

################################################################
# ここから下はプログラムです。変更しないでください。
#

use lib "./lib";

require "jcode.pl";
use KCatch qw( jcode=sjis source );
use FormData;

require "SendMail.pl";




##### システム設定
# 文字エンコード
$charset = 'sjis';

# フォーム名
@FormName = (
'name_str_req'# お名前
,'email_mail_req'# メールアドレス
,'comment_str_req'# 内容
);

# エラー画面用フォーム表示名
%FormData = (
'name_str_req'=>'お名前'
,'email_mail_req'=>'メールアドレス'
,'comment_str_req'=>'内容'
);

####################
# フォームデータ取得
$obj = new FormData();
%in = $obj->CreateHash();
%FormHash = $obj->SelectHash(%in);

$mode = $in{'mode'};


####################
# モード分岐
if($mode eq 'comp'){

$body = <<EOF;
お名前 : $FormHash{'name_str_req'}
E-Mail : $FormHash{'email_mail_req'}
内容 :
$FormHash{'comment_str_req'}
EOF

## 管理者宛送信
MailSend(
$ADMIN_MAIL
, $ADMIN_SUBJECT
#, $FormHash{'comment_str_req'}
, $body
, $FormHash{'email_mail_req'}
, $ADMIN_NAME
, $FormHash{'name_str_req'}
, $bcc
, $addparam
, $charset
);


## ユーザ宛送信
MailSend(
$FormHash{'email_mail_req'}
, $USER_SUBJECT
#, $FormHash{'comment_str_req'}
, $body
, $ADMIN_MAIL
, $FormHash{'name_str_req'}." 様"
, $ADMIN_NAME
, $bcc
, $addparam
, $charset
);

require "./inc/contact_thanks.inc";
exit;

} else {# 確認画面

####################
# フォームデータチェック

$flag = $obj->FormDataCheck(\%FormHash,\%FormData,\@FormName);

if(!$flag){
$msg = $obj->GetErrorMessage();
require './inc/contact_error.inc';
exit;
}
####################

require "./inc/contact_conf.inc";
exit;

}
exit;

補足日時:2007/01/08 01:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!