
以下のようなcgiを組みました。
#! /usr/bin/perl -w
use Calendar::Simple;
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
use lib "/home/makoji/makoji00001/myperl/lib";
my @curr=calendar;
print Dumper(@curr);
レンタルサーバー上のこのCGIをSSHで
perl calendar.cgi
とやるときちんと作動します。
しかしながらブラウザから作動すると500 Internal Sever Errorが出ます。
エラーログを見ると、以下のようになっています。
[Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Can't locate Calendar/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i686-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i686-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl .) at /home/makoji/makoji00001/www/calendar.cgi line 3.
[Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] BEGIN failed--compilation aborted at /home/makoji/makoji00001/www/calendar.cgi line 3.
[Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Premature end of script headers: calendar.cgi
Calendar/Simple.pmが@INCの中に無いとエラーが出ています。3行目でコンパイルに失敗したのもやはりCalendar/Simple.pmです。
@INCにCalendar/Simple.pmのパスを通すためにcgi頭で
use lib "/home/makoji/makoji00001/myperl/lib";
を宣言しているわけです。
で、SSHを用いてコマンドラインから実行すると作動します。
なのに、何でブラウザからだと500 Internal Server Errorが出るのでしょう。
そもそも
use CGI::Carp qw(fatalsToBrowser);
と宣言しているのに500 Internal Server Errorが出るというのも可笑しな話です。
何に問題があるのでしょうか。
ちなみに.bashrcは以下のようになっています。
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
export MANPATH=/home/makoji/makoji00001/myperl/man
export PERL5LIB=/home/makoji/makoji00001/myperl/lib
お手数をお掛けします。
No.3ベストアンサー
- 回答日時:
> #! /usr/bin/perl -w
> use Calendar::Simple;
> ...
> use lib "/home/makoji/makoji00001/myperl/lib";
use lib の実行順が逆で、@INC にパスを追加する前に use Calender::Simple; の行が実行されてしまいます。
use lib の行を移動してみてください。しかし、No1 の方が書かれているように必ずしも実行できるようになる
とは限りません。
> レンタルサーバー上のこのCGIをSSHで
> perl calendar.cgi
> とやるときちんと作動します。
コマンドラインで実行できるのは、.bashrc の中で PERL5LIB を設定しているからです。例え use lib の行が
なくても、コマンドラインからは実行できると思います。しかし、PERL5LIB の設定は、自分の環境だけに有効
で Web サーバには関係ありません。
パスの行を上に持っていったところ、エラーログの内容が変わりました。
Sat Jun 13 12:41:18 2009] [error] [client 114.162.47.49] malformed header from script. Bad header=$VAR1 = [: calendar.cgi
一瞬、まだエラーがあるのかよ~と思ったのですが、考えてみれば、件のプログラムはブラウザ上で閲覧できるためのHTML文を何らサポートしていません。
そこでプログラムを書き換えました。
#! /usr/bin/perl -w
use lib "/home/kojima/kojima00001/myperl/lib";
use Calendar::Simple;
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
use CGI;
$q=new CGI;
my @curr=calendar;
print $q->header,
$q->start_html('Test of Calendar::Simple'),
Dumper(@curr);
$q->end_html;
これでブラウザ上でもキチンと表示できるようになりました。
ありがとうございます。
No.2
- 回答日時:
私もperl scriptのパーミッション設定が不適切、という説に1票。
httpd でCGIを起動するアカウントでは、問題のモジュールへのアクセス権が無いのではないかと。
ま、現象から推測しただけなので外しているかもしれませんが。
No.1
- 回答日時:
いくつかの情報が無いので憶測になってしまいますが、
1. HTTPd の権限不足
一番可能性があると思うのですが、例えば、Apache で動かしているとして、アクセスする CGI や Lib 達に適切なアクセス権限を与えていますか?
2. 実は、"/home/makoji/makoji00001/myperl/lib"; が絶対パスではなくて、HTTPd からは違うパスに見えている。バーチャルサーバなんかを使っている時に発生します。以前、自分が同じ問題で嵌った事があるのでね。
この回答への補足
アドバイスありがとうございます。
パーミションは
calendar.cgiが755、
Simple.pmが555、
.bashrcが644
です。
サーバーはレンタルで
Linux CentOS 5.2
です。
パスの方は
"/home/makoji/makoji00001/myperl/lib";
"/home/makoji00001/myperl/lib";
"/home/myperl/lib";
の3つを試してみましたが、やはりダメです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MF-COBOL COBOL 違い
-
自作pcについて
-
試用期限付きアプリの使用期間...
-
Windows serverでマルチキャス...
-
WindowsからSSHでサーバーにあ...
-
管理者権限なしでポータブル仮...
-
ブラウザのキャッシュの更新タ...
-
プロダクトキー
-
三菱 Got 1000
-
Python CSVファイルについて
-
digital license(デジタルライ...
-
アマゾン。メルアドをそのまま...
-
ExcelでのIT機器の管理方法につ...
-
SierとSESは同じ分類なんですか?
-
SHARP 複合機 BP60-C26のアドレ...
-
プリンタドライバを自動インス...
-
HP 5550 printer のインク残量...
-
PCを効率的にセットアップしたい
-
IT業界を志望している、March下...
-
添付した写真の文字、何で作っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl+DBD::Oracleのエラーがわ...
-
python
-
python 環境構築について
-
@INCにrequireされたファイルが...
-
use lib qw(変数名);は無理?
-
perl DBD::Pg インストールでエ...
-
Net::SSH::Perlについて
-
エラー内容がわかりません。Con...
-
Jcode.pmについて
-
英文でperlの文法などを説明し...
-
DBIをCPANからインストール時に...
-
DB_Fileモジュールインストール...
-
\\* の意味が分かりません。
-
SOAP::Liteを利用したい!
-
Pg.pmモジュールがロードできない
-
CygwinでPerlのCSV_XSを実行する
-
@INCにセットされたディレクト...
-
HTML::FillInFormが使えない(...
-
例外処理のフローチャートの記...
-
「デバイスは PRN を初期化でき...
おすすめ情報