私は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;
}
■□■□■□■□■□■□■□■□■□■□■□
となっています。
どこか原因なのか参考書を読み漁りましたがわかりませんでした。
どうか教えていただけないでしょうか
それとデータベースは入っています。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
More information about this error may be available in the server error log.
error.logでは、エラーはどうなってますか?
(通常は、Apacheのインストールしてあるディレクトリ
の下のlogsにerror.logはあります。)
No.3
- 回答日時:
nipotanさんのご回答で問題が解決すれば重畳ですが,もし解決しなかった場合はまず上記のPerlスクリプトが(CGI等を経由せず)単独でちゃんと動作するかを確認してみてください。
Perlスクリプトのファイルのあるディレクトリで
perl -w Perlスクリプトファイル名
とやれば実行できるはずです。コンパイルエラーが出たら,Perlの記述自体に文法上の誤りがあるということになります。実行時エラーが出るか,実行結果がおかしい場合は,どこに問題があるかを調べる必要が出てきます。
perl -d Perlスクリプトファイル名
のようにデバッガを使って実行してみるとよいと思います。
あと,私が怪しそうに感じたのはアクセス権周りです。Windowsはあまり詳しくないんで間違ってるかもしれませんが,通常CGIは(セキュリティ上の配慮から)非常に弱いアクセス権で実行されるので,ファイルやアプリケーションの操作のアクセス権がなくて失敗することがよくあります。上記のPerlスクリプトの手作業での実行に問題がない場合は,そのあたりを疑ってみてはどうでしょうか? MySQLのログやMySQLが返す(エラー)メッセージなどを調べてみてください。
No.2
- 回答日時:
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.1
- 回答日時:
<br /> とりあえず怪しいところを一点指摘しておきます。<br /> <br /> >#!perl <br /> <b
パス付)が示されていなくてはなりません。従ってaeicさんのサーバーの何処にPerlがインストールされているか調べてその位置を記載します。
例えばUnix系のサーバーなら
#!/usr/local/bin/perl
とかになりますが、aeicさんの場合Windowsの様ですので
#!C:\○○○\×××\perl
といった感じになるのでしょうか。(○○○等は任意のディレクトリ名)
まずはこちらを直してみて下さい。
#Windowsに関してはあまり自信がありませんので間違っていたらどなたかご指摘を。
#もしかしたら「C:」は不要かな?(^_^;
とりあえず怪しいところを一点指摘しておきます。
>#!perl
となっていますが、ここにはperlの在処(パス付)が示されていなくてはなりません。
--------------------------------------
のところですが、一度perlの動作確認をしたときにこのパスで起動させることに成功したのでこのようになっています。
なぜに回答のところに補足が書いてあるかと言うと皆さんに説明するのにあまりにも文章が多すぎて書きけれなかったのでどのように説明するかを考えたところこうなりました。
どうぞよろしくお願いします。
怪しくてすみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- YouTube youtubeからの著作権メールについて 2 2023/02/14 16:12
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- PHP php エラー 2 2022/10/23 16:43
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
結果を得て自動的にページ移動...
-
shift-jisからutf8に変換
-
Perl CGIの中で # を使ってコメ...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
16進の10進変換について
-
文字の横にプルダウンを表示さ...
-
formで特定のinputを送信しない...
-
回数を指定しないで空白行まで...
-
問題作成のWebアプリの作り方を...
-
ACCESS テキストボックスを隙...
-
子windowsからsubmit()後にclos...
-
pythonで演算子を変数に代入す...
-
FindFirst を複数条件で検索
-
【至急!!!】python言語で本を見...
-
<SELECT>タグの折り返し
-
構造体の各データの表示につい...
-
【C#】数値の範囲チェックについて
-
C言語のflagの使い方が分かりま...
-
VBAでPDFのコピーとリネームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
my $html<<EOMの意味を教えてく...
-
malformed header from script....
-
結果を得て自動的にページ移動...
-
Perl CGIの中で # を使ってコメ...
-
パソコン → パャRン
-
shift-jisからutf8に変換
-
CGIから出力される文字が化けて...
-
フリーCGI ラジオボタンの改行...
-
テキストエリアにテキストファ...
-
HTMLのファイルにCGI処理結果を...
-
アクセス人数制限CGIについて。
-
初歩的なCGIですが その2
-
PerlでDBIを使いますが、結果セ...
-
ランダムに背景画像を変える方法。
-
Perlでの数字の12桁化
-
Pythonを用いてCGIを作る勉強を...
-
cgiでのデータ受信
-
CGIファイルを参照制御でき...
-
テキストエリアの改行表示
-
テキストファイルの読み込み
おすすめ情報