• ベストアンサー

同じなのに結果が違う

PerlでCGIを作成しています。 今作成しているのはアクセスカウンタなのですが、本のとおりにまったく同じようにかいてもエラーが出てしまいます。 (「Internal Server Error」) 添付のCDのcgiを持ってくるときちんと表示されます。 でも中身を照らし合わせてもまったく同じなのです。 cgiにする前の「pl」ファイルの状態ではOKなのですが・・・。 これより前につくったおなじようなものでもまったく中身が同じなのに実行できず、 CDの中身の一部分(HTML部分)をコピーして貼り付けたらできるようになりました。 (今回のアクセスカウンタはHTML部分をコピーして貼り付けてもダメでした。) 一体何が(どこが)違うのでしょうか? #こんな説明でわかっていただけるかどうかわかりませんがよろしくお願いします。

  • CGI
  • 回答数4
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • CueCue
  • ベストアンサー率40% (86/214)
回答No.3

手打ちでは、同じに見えても間違えているということは良くあると思いますよ。エクセルで検証されたとのことですが、テキスト比較ツールで比較されてみてはいかがですか。参考URLなど。 下の方の回答にもあるように、全角/半角の違い、よく似た記号の打ち間違いに注意してください。

参考URL:
http://www.vector.co.jp/soft/win95/util/se113286.html
KODAMAR
質問者

お礼

とっても使えるソフトをご紹介いただきありがとうございます。 他のも何点か試してみたのですが、これに勝るものは今のところ出てこないもようです♪ そして、質問したことですが、おかげさまでできました。 一番下の改行が抜けていたんです。 なんだかこんなことで・・・と気が抜けてしまいました・・・。 お騒がせしてしまってすいませんでした。 今後ともよろしくお願いします。

KODAMAR
質問者

補足

回答ありがとうございます。 そうです!この参考URLにあるみたいなソフトを探していたんですよ~!! ありがとうございました!! それで、早速調べてみましたところ、やはり数点違うところがありました。 「これが原因か・・・」と思いながらすべて直してみたのですが、やはり実行されないんです!! 一体なぜなんでしょう?? これ以外にも何か原因があるんでしょうか? 何かおわかりでしたら再度ご回答お願いします!

その他の回答 (3)

  • oodaiko
  • ベストアンサー率67% (126/186)
回答No.4

私が思い付くことといったら ・パーミッションが違う。(777または707になっていますか) ・改行コードが違う。(UNIX改行コードにする必要があるかも知れません) ・文字コードが違う。(Shift-JISまたは Unicodeでは動かないかも知れません) ・ファイル名が違う。(拡張子はちゃんとついてますか。また拡張子がダブッてついていませんか) といったところです。 Windows上でこれらチェックする方法や変換する方法は存じませんのでKODAMARさん御自身でお調べ下さい。 またもうすこし細かい点をあげれば ・バックスラッシュ(\)(Winではこれも円記号に見えると思いますが)に全角円記号(¥)を使っていませんか。 ・見えないところに全角の空白が入っていませんか。 といったところですが、下の補足を見る限りこちらではなさそうですね。

KODAMAR
質問者

お礼

ご回答ありがとうございます。 現在はWindows上でローカルで試しているのでパーミッションは関係ないと思います。(あれっ?関係ありますか!?) ファイル名もちゃんとなっていました。 結局一番最後に改行が入っていなかったという本当につまらない(?)ことが原因でした。 でも今後もこのようなことがないとは限らないので、そのときは回答を参考にさせていただきます!! ご協力ありがとうございました。

回答No.2

ローカルの環境で、ということなのでひとつ参考までに。 そのローカル環境がどのようなものなのかわからないのですが・・・ WindowsにApacheをいれてローカル環境を作っている場合 一番最初の行で #!/usr/local/bin/perl などと 書いてあるはずですが、この部分に間違いはないでしょうか? 多少知っていればそんなこともないとは思いますが、 私も少し前にこのような下らない間違いをしましたので。

KODAMAR
質問者

お礼

回答ありがとうございます。 そこもちゃんと同じように設定してあるのにダメなんです・・・。 一体何が悪いんでしょう? もうわけわからなくなってきました(泣) このままCDのコピーを使えばラクなんですけどね・・・それじゃ自分のためにならないので、まだがんばります。 ありがとうございました。

KODAMAR
質問者

補足

回答ありがとうございます! 2つのファイルを見比べるソフトを使い、相違点を直して、やってみてもできなかったのですが、なんと! 一番下の行のあとに「改行」をしてなかったんです。 できたあとって「なんでこんなこと・・・」って思うんですけど、できるまですごく悩むんですよね。 なんだかお騒がせしてすいませんでした。。。 ご協力ありがとうございました!!

noname#25358
noname#25358
回答No.1

 その2つのプログラムは同じではありません。  どんなに同じに見えても、絶対にどこか違います。  俺もプログラム始めたてで本のプログラムのうちこみとかやってた頃は、「全く同じなのに」とか言って何時間も延々、泣きそうになりながらソースとにらめっことかしてました(笑)  とりあえず、余計なところに全角が混じってないか、何かを勝手に省略(または追加)してないか、転送するときにアスキーモードで転送しているか、などを確認してみてください。

KODAMAR
質問者

お礼

おかげさまでできました。 2つのファイルを見比べるソフトを使い、相違点を直し、やってみたところできなかったのですが、なんと! 一番下の行のあとに「改行」をしてなかったんです。 できたあとって「なんでこんなこと・・・」って思うんですけど、できるまですごく悩むんですよね。 ご協力ありがとうございました!!

KODAMAR
質問者

補足

回答ありがとうございます。 本当に私も泣きそうです・・一体何が違うというのか・・・。 一応違いを知るためにエクセルに1行ずつコピーして、if文で照らし合わせてみたのですが、違いがなかったんです。 if文でもわからないような違いなんでしょうか?? >転送するときにアスキーモードで転送しているか まだサーバーには送っていなくて、ローカルで確認中なので、これは多分大丈夫だと思います。 もうちょっとがんばってみようと思います。 仲間がいたようで(失礼!)ちょっと嬉しかったです。 ありがとうございましたm(_ _)m

関連するQ&A

  • HTMLにCGIカウンターを

    初歩的なCGI(Perl)のアクセスカウンターの作り方を学びました。 今まではHTMLでHPを作成していました。そこでトップページにアクセスカウンターを付けたいのですが、当然のことながら今のトップページは「index.html」ファイルです。このファイルにCGIによるアクセスカウンターをつける場合、「index.html」のファイルを一から「index.cgi」ファイルにPerlで書き換えなければならないのでしょうか。今の「index.html」の一部分を書き換えるだけでCGIのアクセスカウンターが設置できないものでしょうか。

    • ベストアンサー
    • CGI
  • cgi-lib.plのReadParse関数

    あるパールからcgi-libを呼び出して、ReadParse関数を使おうとするとInternal Server Errorがでてしまいます。 パールの中身は #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); です。 そこで3行目と5行目の行頭に#をつけて飛ばすとパールは正常に動きます。 これってcgi-lib.plのReadParse関数がいけないんでしょうか? ダウンロードしたまま何も変更していないのに..... ちなみにサーバーのパールのバージョンは5.004のようです。

    • ベストアンサー
    • CGI
  • SSIが認識されない

    こんにちは。 アクセスカウンターを設置したいのですが、HTML文にタグを埋め込んでも認識してくれません。 ちなみに以下のように書いています。 <!--#exec cmd="./counter.pl"--> <!--#include virtual="./counter.cgi"--> わたしのプロバイダはexecが使用不可なので、include用にプログラムを書き換えているのですが、counter.plもcounter.cgiも文法チェックでは特に問題は発見されません。 counter.cgiに直接アクセスするとちゃんと動いているので、プログラムの問題ではないような気がします。 フリーで配られているカウンターでやってみてもダメでした。 HTMLの問題なのでしょうか? それともブラウザー? どなたかわかる方がいらっしゃいましたら、助けてください!! お願いいたします。

    • 締切済み
    • CGI
  • Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

    現在Perlスクリプトを作成し サーバにアップしました。 SSHでサーバにログインし #perl a.cgi と実行したところ(CGIとして動作させるため。中身はPerlスクリプト) Content-type: text/html <html> <body> あああああ </body> </html> のようなメッセージが表示され正常に動作しているとおもいます。 しかし、 http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると 500 Internal Server Error になります。 パーミッションは755で正常 Perlのパスは#!/usr/bin/perlとしており、これも正常です。 文字コードはeuc-jp 改行コードLF サーバはApache/1.3.33 Perlバージョンは5.8.4 自分のパソコン上でperl+HTTPサーバ(httpd)を使うと HTMLふぁいるとして出力されます。 サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

    • ベストアンサー
    • Perl
  • Apacheをlocalhostで動かしているのですが、Perlの引数

    Apacheをlocalhostで動かしているのですが、Perlの引数のないものやCGIはうまく動くのですが (設定はインターネットのサイトで調べました。)、exec cmd で Perlを呼び出すタグの入った Htmlを動かそうとしたら、Internal Server Errorになってしまいました。exec cmdの入って いないHtmlでもInternal Server Errorになってしまいました。ApacheではHtmlは動かせないの でしょうか、それとも設定がどこか問題があるのでしょうか。どなたかご存知の方よろしかったら 教えてください。ここのカテゴリーでよいのか悩みましたが、とりあえずよろしくお願いします。

  • Apache2.2でPerlを呼び出すSSIを使ったHTMLをloca

    Apache2.2でPerlを呼び出すSSIを使ったHTMLをlocalhostで動かそうとしています。 AddHandler cgi-script .cgi .plに変更。 exec cmdをHTMLファイルに埋め込みました。 <!--#exec cmd="/PROGRA~1/APACHE~1/Apache2.2/cgi-bin/counter.pl counter"--> インターネットのApacheでSSIを使う方法を読み,httpd.confの中に Options FollowSymLinks Multiviews の後にIncludesをつけ   AddType text/html .shtml と   AddHandler server-parsed .shtml を加えました。しかし、localhostで実行するとHTMLのSSIの部分だけ表示されません。 (アクセスカウンターのカウンターだけ表示されません)。エラーログには ”指定されたファイルが見つかりません。 : don't know how to spawn cmd child process: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/counter.shtml” と記録されていました。 どうしたらよいのでしょうか。 どなたか解決できるかた、回答よろしくおねがいします。

    • 締切済み
    • CGI
  • Apacheをlocalhostで動かしているのですが、Perlの引数

    Apacheをlocalhostで動かしているのですが、Perlの引数のないものやCGIはうまく動くのですが (設定はインターネットのサイトで調べました。)、exec cmd で Perlを呼び出すタグの入った Htmlを動かそうとしたら、Internal Server Errorになってしまいました。exec cmdの入って いないHtmlでもInternal Server Errorになってしまいました。ApacheではHtmlは動かせないの でしょうか、それとも設定がどこか問題があるのでしょうか。どなたかご存知の方よろしかったら 教えてください。よろしくお願いします。質問がここのカテゴリーでよかったのかわかりませんでした が、サーバーと書いてあったのでここに投稿しました。間違ってたらすいません。

  • 500 Internal Server Error

    500 Internal Server Errorが出ます。 サーバ:CentOS6.4 サーバ側の文字コード:UTF-8 perlのパス:/usr/bin/perl index.cgiの文字コード:LF (サーバ上で直接作成) index.cgiのパーミッション:777 (パーミッションの問題を避けるためわざと、777に設定) ここで、サーバ上で直接実行 perl /var/www/html/index.cgi すると、正しく処理の結果が返ってきてエラーは出ません。 しかし、クライアントのブラウザでindex.cgiにアクセスすると、500 Internal Server Errorが出ます。 なお、index.cgiを設置するディレクトリはApacheで以下のように設定しcgiスクリプトを有効にしています。 <Directory “/var/www/html”> Options FollowSymLinks ExecCGI </Directory> AddHandler cgi-script .cgi .pl #AddDefaultCharset UTF-8 ******************************************************* 【/var/www/html/index.cgi】 #!/usr/bin/perl print "Content-type: text/html"; print "<html>"; print "<body>"; print "<p>"; print "CGI"; print "</p>"; print "</body>"; print "</html>"; スクリプトの文法に問題があれば、サーバ上で直接実行させた時点でエラーを吐きそうですし、 パーミッションは777にしていますし、Apacheの設定もcgiを有効にしているので 他に500 Internal Server Errorが出る原因が掴めません。 Apacheの設定で、#AddDefaultCharset UTF-8 として文字セットを無効にした場合は CGIスクリプトの方で何か追加してやらないと、文字化け以前の問題で必ず500 Internal Server Errorを吐くんですかね? ご指導のほどよろしくお願い致します。

    • ベストアンサー
    • CGI
  • cgiがうまく動作しません。

    はじめまして。 現在独学でlinuxの勉強をしている者です。検索をしたり本を読んだりして対策を試みたのですがどうしても解決できないため、質問させていただきます。 環境は redhatlinux9 Apache2.0.40 です。 cgiを置いたディレクトリにブラウザでアクセスすると、 Internal Server Error と出てしまいます。 ログを見ると、 [error] 6099: ModPerl::Registry: Can't locate ./jcode .pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li b/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe rl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i3 86-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_per l /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at /var/w ww/cgi-bin/bbs/wforum.cgi line 11.! と表示されています。試しにwforum.cgiの11行目以下の require './jcode.pl'; require './fold.pl'; require './wf_init.cgi'; を require 'jcode.pl'; require 'fold.pl'; require 'wf_init.cgi'; と変更してみたところ、今度は (略)Can't locate fold.pl(略) at /var/www/cgi-bin/bbs/wforum.cgi line 12.! というエラーログが表示されました。 perlプログラムの文法、パーミッション、改行コード、FTP転送の際の転送モードは確認済みのため、問題ないと思われます。また、ここの過去ログを参考にして作成した #!/usr/bin/perl print<<EOF Content-type: text/html <HTML><BODY>CGI works Good.</BODY></HTML> EOF というtest.cgiは動作可能でした。 こういった場合、どのような原因が考えられるでしょうか。どうかご教授ください。よろしくお願いします。

  • サーバを移行したのですが、プログラムが動きません。

    はじめまして。 Perl超初心者です。 先日、あるサイトのリニューアルをし、PHPでシステムを組んだのですが、一部のコンテンツに関しては、前の業者がPerlで組んでいたシステムをそのまま転用することになりました。 そこで、以前のデータを貰って、サーバのcgi-binのフォルダにそれらのデータをコピーし、関係すると思われるファイルのパーミッションを、755にし、 また、以前は、ファイルの一行目が、#!usr/local/bin/perl だったのですが、 これを、#!usr/bin/perl に修正しましたが、動いてくれません。 Internal Server Error と出てしまいます。 試しに、単純な text.cgi #!/usr/bin/perl print "Content-Type: text/html\n\n"; print "OK"; というファイルを置いてみたのですが、これは動いています。 ちなみに、移行しなければならないcgiファイルは、プログラムの中で、.pl ファイルを複数読み込んでいるのですが、このファイルのパーミッションは、755で良いのでしょうか? また、このプログラムでは、 cgi-bin のディレクトリから、 data というディレクトリの中にある.datファイルを読み込むはずなのですが、このdataというディレクトリは、cgi-binと同階層に置けばよいでしょうか? Internal Server Errorというエラーは、どういうときに出るエラーなのでしょうか? 色々ファイルを操作しても、このエラーしか出ないので、どう対処してよいかよく分かりません。 不勉強で大変心苦しいのですが、 ご回答よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう