質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

2回答

4548閲覧

mySQLを使った簡単な.cgiファイルにアクセスするとエラーになってしまいます。

sug1t0m0

総合スコア40

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

1クリップ

投稿2015/12/19 07:25

編集2015/12/19 09:26

WebサーバにアップロードしたmySQLを使った簡単な.cgiファイルにアクセスするとエラーになってしまいます。
使用しているWebサーバはOS X Serverです.Perl+mySQLの環境は下記URLを参考に整えました.
[http://www.futomi.com/lecture/macosx/dbd_mysql.html]
detest.cgiのソースコードは

#!/opt/local/bin/Perl # 下2行はおまじない use strict; use warnings; # データベースへ接続するためのモジュールを読み込む use DBI; # データソースの登録 my $db_source = 'DBI:mysql:abc'; # ユーザー名 my $user = 'abc'; # パスワード my $pass = 'abcd'; # SQL ステートメント my $statement = 'SELECT `id` FROM `test` LIMIT 0 , 30;'; # データベースへの接続 # 失敗したら、エラーを表示して実行を終了させる my $dbh = DBI->connect($db_source, $user, $pass) || die $DBI::errstr; # SQL ステートメントをコンパイルする # 失敗したら、エラーを表示して実行を終了させる my $sth = $dbh->prepare($statement) || die $dbh->errstr; # コンパイルした SQL ステートメントを実行する # 失敗したら、エラーを表示して実行を終了させる my $result_set = $sth->execute || die $sth->errstr; # SQL ステートメントの実行に成功をしたら # 実行結果を取得する print "Content-Type: text/html\n\n"; print "\n"; if ($result_set) { # 結果件数を取得する my $rows = $sth->rows; # 結果件数を表示する print "$rows records found.\n"; # 結果件数分の処理を行う for (my $i = 0; $i < $rows; $i++) { # 実行結果を1件ずつ取得する my @result = $sth->fetchrow_array; # 実行結果の値を表示する print "$result[0]\n"; } } # ステートメントハンドルのオブジェクトを閉じる $sth->finish; # データベースハンドルのオブジェクトを閉じる $dbh->disconnect; exit;

となってます.
クライアント側のエラーはInternal Server Errorです.
サーバ側のエラーは

tail -f /private/var/log/apache2/error_log

で表示したものは

[Fri Dec 18 17:54:29.075038 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] AH01215: install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.3 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at (eval 3) line 3.: /Library/Server/Web/Data/Sites/sugi-tomo.com/dbtest.cgi [Fri Dec 18 17:54:29.106924 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] AH01215: Perhaps the DBD::mysql perl module hasn't been fully installed,: /Library/Server/Web/Data/Sites/abcdefg.com/dbtest.cgi [Fri Dec 18 17:54:29.106966 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] AH01215: or perhaps the capitalisation of 'mysql' isn't right.: /Library/Server/Web/Data/Sites/abcdefg.com/dbtest.cgi [Fri Dec 18 17:54:29.107004 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] AH01215: Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge.: /Library/Server/Web/Data/Sites/abcdefg.com/dbtest.cgi [Fri Dec 18 17:54:29.107041 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] AH01215: at /Library/Server/Web/Data/Sites/abcdefg.com/dbtest.cgi line 21.: /Library/Server/Web/Data/Sites/abcdefg.com/dbtest.cgi [Fri Dec 18 17:54:29.107075 2015] [cgi:error] [pid 94505] [client 126.236.146.142:50492] End of script output before headers: dbtest.cgi

となっています.ちなみにターミナルからdbtest.cgiの

print "Content-Type: text/html\n\n”;

をコメントアウトして実行するとちゃんと動作します.

また,detest.cgiを

#!/usr/bin/perl5.16 print "Content-type: text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>test</title>\n"; print "</head>\n"; print "<body bgcolor=\"#fffffff\">\n"; print "This is test CGI.\n"; print "</body>\n"; print "</html>\n";

と書き換えるとwebからアクセスしても動作します.ちなみに

perl -E 'say for @INC'

コマンドでの出力結果は

/opt/local/lib/perl5/site_perl/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/site_perl/5.16.3 /opt/local/lib/perl5/vendor_perl/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/vendor_perl/5.16.3 /opt/local/lib/perl5/5.16.3/darwin-thread-multi-2level /opt/local/lib/perl5/5.16.3 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl

となっていてどうしてエラーメッセージにあるようなディレクトリが参照されるのかわかりません。
DBD/mysqlは/opt/local/lib/perl5/site_perl/5.16.3/darwin-thread-multi-2level
に入っていて

perl -MDBD::mysql -e 1

コマンドでもエラーを吐かないです。
どうして,webからアクセスした場合はDBD::mysqlが使えなくなってしまうのかどうしてもわかりません.どなたかお助けください.

perl -v

コマンドの結果は

This is perl 5, version 16, subversion 3 (v5.16.3) built for darwin-thread-multi-2level Copyright 1987-2012, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.

でした。ターミナルからdbtest.cgiを実行したときのコマンドは

perl5.16 dbtest.cgi

でContent-Typeをコメントアウトしなくてもdetest.cgiは動作しました.

which Perl

コマンドの出力結果は

/opt/local/bin/Perl

でした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/12/19 07:36

perl -v の結果と、ターミナルからdbtest.cgiを実行したときのコマンドを教えていただけますか? ちなみに、ターミナルからdbtest.cgiを実行する場合、Content-Typeをコメントアウトしなくても大丈夫だと思います。
argius

2015/12/19 08:23

情報の追加、ありがとうございます。 とりあえず、文字列の閉じるクォーテーションが全角(”)になっているようです。そこを修正してコメントアウトせずにもう一度perl5.16 dbtest.cgiをやってみてください。他の行もそうなっているところがあります。
sug1t0m0

2015/12/19 08:26

ご指摘ありがとうございます.早速修正して確認いたします.
argius

2015/12/19 09:08

print "\n”; のところの全角が直っていませんね。いまのままだと、/opt/local/bin/Perl detest.cgiでもエラーになるのでは?
guest

回答2

0

ベストアンサー

コンソールで実行しているPerlは、v5.18のほうなのではないでしょうか。

perl -v の結果と、ターミナルからdbtest.cgiを実行したときのコマンドを教えていただけませんか?


(追記)

念のため、コンソールでのperlコマンドは、すべて/usr/bin/perl5.16で実行してみてください。

which perlの結果も教えていただけると幸いです。


(追記2)

Ken.sakanakanaさんとかぶってしまいますが...

実行していただいた結果によると、Perl5.16が複数インストールされていて、/usr/bin/perl5.16/opt/local/bin/Perlは別の Perl5.16 を指している可能性が高そうです。

最初、Perl5.16と5.18の2つが入っていて、コンソールでは5.18のほうのを実行しているのでは?と思いましたが、Macのバージョンが古いのかな?

投稿2015/12/19 08:17

編集2015/12/19 08:54
argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sug1t0m0

2015/12/19 09:19

.cgiのshebangを/opt/local/bin/Perlに変えたところエラーメッセージが下記のように変わりました。 [Sat Dec 19 17:51:29.129971 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: Global symbol "$rows" requires explicit package name at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 45.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130017 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 51, near "}": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130069 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: Execution of /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi aborted due to compilation errors.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130089 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] End of script output before headers: dbtest.cgi [Sat Dec 19 17:51:58.036798 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: "my" variable $sth masks earlier declaration in same scope at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 41.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.064971 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 39, near ") {": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065041 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: Global symbol "$rows" requires explicit package name at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 45.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065087 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 51, near "}": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065139 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: Execution of /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi aborted due to compilation errors.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065159 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] End of script output before headers: dbtest.cgi どうやらDBD::mysqlのエラーは消えたようです.Macは比較的新しく5.18も確かに入っていました.perl -v コマンドで5.16が呼び出されるので二つ入っているためエラーが起こるのではないかと考えてしまい削除してしまいました.すみません.
argius

2015/12/19 09:24

すみません、情報の追加依頼のほうと入れ違いになってしまいました。 再度ここにも記載しておきます。 print "\n”; のところの全角が直っていませんね。 いまのままだと、 /opt/local/bin/Perl detest.cgi でもエラーになるのでは? /opt/local/bin/Perl detest.cgi のほうがエラーが見やすいので、そちらでももう一度確認していただけないでしょうか。
sug1t0m0

2015/12/19 09:28

ソースコードを書き直したところエラーが消えました。ありがとうございます!
sug1t0m0

2015/12/19 09:30

ちなみに削除したperl5.18を再インストールする方法はあるのでしょうか.
argius

2015/12/19 09:42

もとに戻す方法は分かりませんが、 Homebrewなどを使っているのでしたら、そちらでインストールしてしまったほうが早いでしょうね。 いずれにしても、システムのPerlと(Homebrewなどの)パッケージマネージャーで入れたPerlを区別するように注意する必要があります。 CPANも /usr/local/perl5.16 -MCPAN -e shell のようにすれば、 使いたいPerlのほうにモジュールをインストールすることができます。
sug1t0m0

2015/12/19 09:51

分かりました!ありがとうございます!
guest

0

shebangに指定している、

#!/usr/bin/perl5.16

と、モジュールの確認コマンドのperlが同じものであるか確認したく。

/usr/bin/perl5.16 -MDBD::mysql -e 1 ; echo $?

とした場合でも、エラーはありませんか?

投稿2015/12/19 07:54

Ken.sakanakana

総合スコア1768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sug1t0m0

2015/12/19 08:05

回答ありがとうございます。下記のようなエラーメッセージが出てきました。 --- /usr/bin/perl5.16 -MDBD::mysql -e 1 ; echo $? Can't locate loadable object for module DBD::mysql in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.3 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at -e line 0. Compilation failed in require. BEGIN failed--compilation aborted. 2 ---
Ken.sakanakana

2015/12/19 08:26

/usr/bin/perl5.16にはDBD::mysqlがインストールされていないようです。 which perl でコマンドラインから実行されておられるperlのパスを確認され、 perl -v でバージョンをご確認の上、差支えなければ、cgiのshebangを コマンドラインで実行されれおられるものに、変更されては如何でしょうか。
sug1t0m0

2015/12/19 09:03

cgiのshebangを/opt/local/bin/Perlに変えたところエラーメッセージが下記のように変わりました。 [Sat Dec 19 17:51:29.129971 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: Global symbol "$rows" requires explicit package name at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 45.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130017 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 51, near "}": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130069 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] AH01215: Execution of /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi aborted due to compilation errors.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:29.130089 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54017] End of script output before headers: dbtest.cgi [Sat Dec 19 17:51:58.036798 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: "my" variable $sth masks earlier declaration in same scope at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 41.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.064971 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 39, near ") {": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065041 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: Global symbol "$rows" requires explicit package name at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 45.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065087 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: syntax error at /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi line 51, near "}": /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065139 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] AH01215: Execution of /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi aborted due to compilation errors.: /Library/Server/Web/Data/Sites/abcd.com/dbtest.cgi [Sat Dec 19 17:51:58.065159 2015] [cgi:error] [pid 25872] [client 133.35.129.2:54019] End of script output before headers: dbtest.cgi
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問