OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

ブラウザに表示できません。

  • すぐに回答を!
  • 質問No.119870
  • 閲覧数967
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 10% (60/582)

私はWebDBに挑戦してみようと思いMySQLを勉強しています。
そこで参考書を見ながら見よう見真似でCGIを作ったのですがブラウザーに表示できません。
環境的には
■□参照1□■□■□■□■□■□■□
Apache1.3.12(WIN32)
c:home/htdocs/public_html
MySQL3.23.32-win
ActivePerl5.60
□■□■□■□■□■□■□■□■□■

です。
perlを使っていますがブラウザにて
表示すると
■□参照2■□■□■□■□■□■□■□■□
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
--------------------------------------------------------------------------------
Apache/1.3.12 Server at localhost Port 80
■□■□■□■□■□■□■□■□■□■□■□

と出ています。
実際に作ったperlソースは
■□参照3■□■□■□■□■□■□■□■□■□
#!perl
#DBIモジュールを使用する
use DBI;
my($dns) = "DBI:mysql:webdatabase:localhost";
my($username) = "root";
my($password) = "654321";
#データベースへアクセスする値
my($dbh, $sth);
#データベースから得た情報を格納する値
my(@ary);
#データベースへアクセスする
$dbh = DBI -> connect ($dns, $username, $password)
or &Error("データベースにアクセスできません1");
#データベースへMysqlコマンドを送る準備をする-------------------------------
$sth = $dbh->prepare("SELECT * FROM mytable");
#準備したコマンドを実行する
$sth -> execute()
or &Error("MySQLを実行できません。2");
#実行したコマンドから取り出した情報を表示する
print<<"__start_html";
Content-type: text/html\; charset=shift_jis
<PRE>
__start_html
while (@ary = $sth -> fetchrow_array())
{
print join ("\t", @ary), "\n";
}
print "</PRE>\n";
#コマンドの実行を終了する
$sth -> finish();
$dbh -> disconnect();
exit;
#エラー部分のsubメニュー------------------------------------------------------
sub Error
{
print<<"__html";
Content-type: text/html\; charset=shift_jis
$_[0]
__html
exit;
}
■□■□■□■□■□■□■□■□■□■□■□

となっています。
どこか原因なのか参考書を読み漁りましたがわかりませんでした。
どうか教えていただけないでしょうか
それとデータベースは入っています。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

とりあえず怪しいところを一点指摘しておきます。 >#!perl となっていますが、ここにはperlの在処(パス付)が示されていなくてはなりません。 従ってaeicさんのサーバーの何処にPerlがインストールされているか調べてその位置を記載します。 例えばUnix系のサーバーなら #!/usr/local/bin/perl とかになりますが、aeicさんの場合Windo ...続きを読む

とりあえず怪しいところを一点指摘しておきます。

>#!perl

となっていますが、ここにはperlの在処(パス付)が示されていなくてはなりません。
従ってaeicさんのサーバーの何処にPerlがインストールされているか調べてその位置を記載します。

例えばUnix系のサーバーなら

#!/usr/local/bin/perl

とかになりますが、aeicさんの場合Windowsの様ですので

#!C:\○○○\×××\perl

といった感じになるのでしょうか。(○○○等は任意のディレクトリ名)
まずはこちらを直してみて下さい。

#Windowsに関してはあまり自信がありませんので間違っていたらどなたかご指摘を。
#もしかしたら「C:」は不要かな?(^_^;
お礼コメント
aeic

お礼率 10% (60/582)

とりあえず怪しいところを一点指摘しておきます。

>#!perl

となっていますが、ここにはperlの在処(パス付)が示されていなくてはなりません。
--------------------------------------

のところですが、一度perlの動作確認をしたときにこのパスで起動させることに成功したのでこのようになっています。
なぜに回答のところに補足が書いてあるかと言うと皆さんに説明するのにあまりにも文章が多すぎて書きけれなかったのでどのように説明するかを考えたところこうなりました。
どうぞよろしくお願いします。
怪しくてすみませんでした。
投稿日時 - 2001-08-17 16:02:17


  • 回答No.2
レベル11

ベストアンサー率 59% (134/227)

naturalさんの言っていることも一理あるんですが(通常、ルートディレクトリにperl.exeが存在することは考えにくい) それよりも、出力部分のHTTP(レスポンス)ヘッダと、コンテンツの境目がありません。 通常出力もエラー出力もヒアドキュメントで書かれているのですが、 --- Content-type: text/html; charset=shift_jis <PRE> ...続きを読む
naturalさんの言っていることも一理あるんですが(通常、ルートディレクトリにperl.exeが存在することは考えにくい)
それよりも、出力部分のHTTP(レスポンス)ヘッダと、コンテンツの境目がありません。

通常出力もエラー出力もヒアドキュメントで書かれているのですが、
---
Content-type: text/html; charset=shift_jis
<PRE>
---
から始まり、処理結果の出力まで、結局最初に空行が出てくるまでの内容は
全て「HTTP(レスポンス)ヘッダ」として認識されます。
既にヘッダ2行目の<PRE>はMIME規定違反として、正常な出力という扱いにはならず
エラーになるはずです。

---
print<<"__start_html";
Content-type: text/html\; charset=shift_jis

<PRE>
__start_html
---

---
print<<"__html";
Content-type: text/html\; charset=shift_jis

$_[0]
__html
---
のように、コンテンツ識別子の後に空行を入れれば解決するかと。。。
  • 回答No.3
レベル11

ベストアンサー率 47% (160/334)

 nipotanさんのご回答で問題が解決すれば重畳ですが,もし解決しなかった場合はまず上記のPerlスクリプトが(CGI等を経由せず)単独でちゃんと動作するかを確認してみてください。  Perlスクリプトのファイルのあるディレクトリで     perl -w Perlスクリプトファイル名 とやれば実行できるはずです。コンパイルエラーが出たら,Perlの記述自体に文法上の誤りがあるということになり ...続きを読む
 nipotanさんのご回答で問題が解決すれば重畳ですが,もし解決しなかった場合はまず上記のPerlスクリプトが(CGI等を経由せず)単独でちゃんと動作するかを確認してみてください。

 Perlスクリプトのファイルのあるディレクトリで
    perl -w Perlスクリプトファイル名
とやれば実行できるはずです。コンパイルエラーが出たら,Perlの記述自体に文法上の誤りがあるということになります。実行時エラーが出るか,実行結果がおかしい場合は,どこに問題があるかを調べる必要が出てきます。
    perl -d Perlスクリプトファイル名
のようにデバッガを使って実行してみるとよいと思います。

 あと,私が怪しそうに感じたのはアクセス権周りです。Windowsはあまり詳しくないんで間違ってるかもしれませんが,通常CGIは(セキュリティ上の配慮から)非常に弱いアクセス権で実行されるので,ファイルやアプリケーションの操作のアクセス権がなくて失敗することがよくあります。上記のPerlスクリプトの手作業での実行に問題がない場合は,そのあたりを疑ってみてはどうでしょうか? MySQLのログやMySQLが返す(エラー)メッセージなどを調べてみてください。
  • 回答No.4
レベル11

ベストアンサー率 49% (139/279)

More information about this error may be available in the server error log. error.logでは、エラーはどうなってますか? (通常は、Apacheのインストールしてあるディレクトリ の下のlogsにerror.logはあります。)
More information about this error may be available in the server error log.

error.logでは、エラーはどうなってますか?

(通常は、Apacheのインストールしてあるディレクトリ
の下のlogsにerror.logはあります。)
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ