アプリ版:「スタンプのみでお礼する」機能のリリースについて

つい最近perlに手を付けて、非常に手こずっています。何に手こずっているかも申しますと、ほんの通りにプログラムを書いてもうまく動作しないことです。本は「Perl/CGI超入門」(藤森○絵)筆です。入力フォームのボタンをクリックしてもWEBページ(localhost)が「開くことができません」とでます。HTML、○.plどちらも指定したフォルダに入っています。HTMLのページは入力フォームですがちゃんとWEBに出ます。でも、フォームの中の文字列を取得してCGIのページになると表示されません。perlはCygwin,Activperlとも試してみました。CGIのページに跳んだときのURLは本に書いているURLと同じくでます。
著者へ質問できるようなアドレスも無く、技術評論者に質問できるようなページもないので、なすすべ無しといったところです。私のPCの設定に問題があるのかもと思い、インターネットセキュリティーソフトをおアンインストールしてみましたが同じでした。内心、これを超初心者として出版しているのであれば、本当に初心者のものは皆頭にきてしょうがないだろうなというのが本音です。perl自体の言語で引っかかっているのではなく、サンプルプログラムが動作しない(コピペで)。どなたか同じ本を買った方で、原因が分かるか方おりませんでしょうか。

A 回答 (7件)

> そのときの、URLを見てみると、​>

http://localhost/httpd/cgi-bin/64.pl?name=&zipco …​のように表示がでます。
> localhostとhttpdが入っていますが、これを​http://localhost/cgi-bin/64.pl​ と書き直してやるとwebが表示されました。

えーと、
/httdp/cgi-bin
というディレクトリ構成になっていると思いますが、CGIスクリプトから
見る場合、/httpd という部分は指定しないようになっていませんか?
色々設定できるので断言できませんけど、

http://localhost/

としたときの基準位置が c:/httpd/ かなにかで、スクリプトには
そこは書かずに localhost/sample.html と書けば
c:/httpd/sample.html を参照するように anttpd がよろしくやってくれたはずです。
同様に、
http://localhost/cgi-bin/cgi-sample.pl
と書けば、
c:/httpd/cgi-bin/cgi-sample.pl を見に行くので、逆に
http://localhost/httpd/cgi-bin/cgi-sample.pl
という参照をしてしまうと、期待したファイルは見えないはずです。

任意のHTMLファイルから 64.pl を呼び出すときの href= ... の
部分はどうなっていますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。localhost/httpdと出るのが原因であることが分かっていたのですが、ボタンをクリックするとそうなってしまってこまっておりました。一度全部ファイルを削除して、もう一度ファイルの中を整理しましたら、きちんと動作しました。原因はいまだに分かりませんが、今は言うことを聞いて動作してくれていますので、ようやく投げ出したくなった気持ちも落ち着きました。言語自体は簡単みたいなので、どうにかなりそうかなと少しやる気も出てきました。皆さんには本当に助けていただいて感謝しております。ありがとうございました。

お礼日時:2007/08/09 01:00

インフォシークの場所を使って実行しましたが


ちゃんと動きますね(^w^

perlの位置(インフォシークにあわせて)を変えたのとcgi-lib.plをDLしただけ。
    • good
    • 0
この回答へのお礼

ありがとうございます。なにやら少し原因が分かってきました。
HTMLのページからボタンをクリックします。クリックによってcgi-bin/64.plに飛びます。すると「webを表示できない」となります。そのときの、URLを見てみると、http://localhost/httpd/cgi-bin/64.pl?name=&zipco …のように表示がでます。localhostとhttpdが入っていますが、これをhttp://localhost/cgi-bin/64.plと書き直してやるとwebが表示されました。htmlファイルはhttpd/64.html、CGIファイルはhttpd/cgi-bin/64.pl、ライブラリーはhttpd/cgi-bin/cgi-libです。ためしにhtmlファイルをcgi-binの中に入れてみてもだめでした。なぜ、URLが正しく表記されてこないのはなぞです。

お礼日時:2007/08/08 23:32

#1です。



AnHTTPDは自分も使っています。最初のサンプルが動いているのなら、
AnHTTPDとperlとのつながりもOKのようですね。

自分のローカルで試そうとしたが、最近はperlを使っていないので
レンタルサーバにhtmlとplを上げてみました。レンタルサーバには
perlがあるのは確かなのですが、cgi-libの場所は不明なので、
require "cgi-lib.pl";
&ReadParse();
の2行はコメントにして、実行したところ動きました。
という事は、ityounomiさんが自分で言っていたように、cgi-libの
問題の可能性大ですね。

一度、わたしの試したと同じことをして動作確認してはどうでしょう。
それで動くようだったら、確実にcgi-libに問題を絞り込めます。
    • good
    • 0

#3の補足にあるスクリプトは一本のものですか?


であればこれでは動きませんよ。

まず#!の行がファイルの先頭にあり、最初に出力するのは
ヘッダー情報でなければなりません。
が、補足にあるものでは真ん中あたりですよね。

あと、ヒアドキュメントのターミネータの消し残しらしきごみが
あるので、これでエラーになっているかもしれません。
もう一度どのように本に載っているのか確かめてはどうですか。
    • good
    • 0
この回答へのお礼

ありがとうございます。ファイルはHTMLファイルとCGIファイルの2つに分かれています。もちろん、スクリプトは別になっています。
ゴミの部分もサンプルプログラム自体が動かないので・・・。なんとなく自分的にはライブラリーの問題のような気がしています。ライブラリーにつながっていないスクリプトは動きます。ライブラリーもCGIファイルと同じフォルダに入れておりますが。

お礼日時:2007/08/08 21:58

こんにちは、皆さんと同じく本は持っていません。


(localhost) という事は、お使いのパソコン一台でやっているのですよね?
1.WEBサーバーは何を使っているのですか?
2.ブラウザの URL に http://localhost/ と入力して実行キーを押したら、何が表示されますか?
#1氏も聞かれていますが、まずそこからでしょうね。

これは、
>perl自体の言語で引っかかっているのではなく、サンプルプログラムが動作しない(コピペで)。
以前の問題ですので、まずこれを補足してもらわなければ、皆さん回答のしようがないです。

この回答への補足

<html>
<head>
<title>申込み画面</title>
</head>
<body>
<h1>申込み画面</h1>
<form action=cgi-bin/64.pl method="get" >
<p>名前:<input type="text" name="name" size="24"></p>
<p>郵便番号:<input type="text" name="zipcode" size=8>
住所:<input type="text" name="addr" size=80></p>
<p>支払方法:
<select name="pay">
<option value="現金" selected>現金
<option value="クレジットカード">クレジットカード
</select>
</p>
<input type="submit" value="申込み">
</form>
</body>
</html>
EOL

#!/cygwin/bin/perl
require "cgi-lib.pl";
&ReadParse();

print <<HTML_DOCUMENT;
content-type: text/html

<html>
<head>
<title>受付画面</title>
</head>
<body>
<h1>受付確認画面</h1>
<table border="1">
<tr>
<td>お名前</td>
<td>$in{'name'} 様</td>
</tr>
<tr>
<td>商品のお送り先</td>
<td>$in{'zipcode'} $in{'addr'} </td>
</tr>
<tr>
<td>ご請求方法</td>
<td>$in{'pay'}</td>
</tr>
</table>
<br>
<p>以上の内容で商品を受け付けました。<br>
ありがとうございました。</p>
</body>
</html>
HTML_DOCUMENT
EOL

これがうまくいかないのです!!!!
cgi-libはこのcgiと同じフォルダに入っています。

補足日時:2007/08/08 19:42
    • good
    • 0
この回答へのお礼

助け舟ありがとうございます。webサーバーは中田昭雄さんが作成したAN HTTPDというフリーソフトです。その本はそれを使用してのサンプルプログラムです。PCを立ち上げてHTTPDのアイコンをクリックして、下のタスクに小さく表示された後、htttp://localhostとURLに入れて、ENTERすると「WEBサイトによってこの表示を拒否されました」とでます。下のサンプルプログラムでは普通に表示されます。URLもhttp://localhost/cgi-bin/61.plのように表示されています。
サンプルプログラムでの実行なので、変なところに全角とかも入っていないと思いますし、もう・・・・!!!

#!/cygwin/bin/perl

$fierst_name = "吉田";
$family_name = "藤森";
$FIEST_NAME ="yosida";
$FAMILY_NAME = "fuzimori";

print <<HTML_DOCUMENT;
content-type: text/html

<html>
<body>
私の名前は$family_nameです。<br>
皆さん、私のことは「$fierst_name」と呼んでください。<br><br>
My name is $FIERST_NAME $FAMILY_NAME.<br>
My family name is $FAMILY_NAME.<br>
Please call me $FIRST_NAME.<br>
</body>
</html>
HTML_DOCUMENT
EOF

お礼日時:2007/08/08 19:40

こんにちは。

#1の方と同じく本は持っていませんが、適当にperlで掲示板を作成したことがあります。その時は、ネットで勉強しました。私はとほほさんのページがかなり参考になりました。よろしければご参考にされて下さい。

参考URL:http://www.tohoho-web.com/wwwcgi6.htm
    • good
    • 0

外してるかもしれませんが、



その本は持ってないですが、なんだかwebサーバが動いてないようにみえますが、どうでしょう。

「入力フォームですがちゃんとWEBに出ます」という事ですが、入力フォームのhtmlをブラウザにドラッグして開いているとかいう事ないですか。そうだとすると、urlのエリアがhttp:でなくfile::で始まってます。

あるいは、webサーバのドキュメントルート下にcgiプログラムを置いてないとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。ご指摘の点どちらもクリーしているんですが、だめなんです。
cgi-lib.plもcgiのフォルダの中に入っています。
どうも、
reqire "cgi-lib.pl";
&ReadParse();
あたりが問題のような気がしています。
バージョンが合わないとか、何かありそうな気がしています。

お礼日時:2007/08/08 17:42

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