
ホスティングを使用しています。
plファイルについて、以前のサーバはちゃんと動作していましたが、
新しいサーバで、jcode.plが読み込めないらしくInternal Server Errorが出てしまっています。
階層は
httpdocs--test.pl
|--cmn--jcode.pl
にしています。
ログを見ると
[error] Can't locate cmn/jcode.pl in @INC
17行目部分、つまりrequire 'cmn/jcode.pl';があるところがエラーになってます。
以前は読み込めているのに、新しいサーバでは読み込めていない。
ちなみに
・パーミッションはちゃんと変更していますtext.pl[755]
・httpdocs自体は.htaccessでpl自体は動作できています
つまり、 require行を外すとページはきちんと表示されます。
となると考えられる原因はなんでしょうか?
そして対策方法を教えて頂ければと思います。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
本体のスクリプトのファイル名が main.cgi だとしてそこと同じ
ディレクトリに index.cgi というファイル名で以下のような
スクリプトを書いてください。
#!/usr/bin/perl
# ↑Perl のディレクトリ
# wrapper
use strict;
use CGI::Carp qw(fatalsToBrowser);
use File::Spec;
use File::Basename;
use Cwd;
# カレントディレクトリの設定
my $fn = File::Spec->rel2abs(__FILE__);
$fn =~ s/\\/\//g;
my ($dir) = (fileparse($fn))[1];
chdir $dir if(getcwd() ne $dir);
# main.cgi を読み込む
require './main.cgi';
exit;
そして、すべてのリクエストを index.cgi に対して行うように
するとスクリプトのあるディレクトリがカレントディレクトリになり
ます。
ただし、すべての環境で動作するかどうかは分かりません。
No.2
- 回答日時:
調べればわかるんだけど, @INC は「require や use するファイルを探すディレクトリ」のリストです. この場合,
require 'cmn/jcode.pl';
を実行すると
/usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/cmn/jcode.pl,
/usr/lib/perl5/5.8.5/cmn/jcode.pl,...
を順に探し, 一番最初に見つかったファイルを読み込みます. そして, そのようなファイルが見つからなければ
Can't locate cmn/jcode.pl in @INC
というエラーになります.
なお, @INC の中の「.」は「スクリプトのあるディレクトリ」ではなく「スクリプトを実行するときのディレクトリ」です. だから, これは「スクリプトのあるディレクトリ」を指すとは限りません. 念のため.
この回答への補足
それで具体的にどうすればいいのかな
#!/usr/bin/perlパスはついているし
その下に
#!/usr/lib/perl5/5.8.5/
とかパスを書き足しても解決できないのですが
No.1
- 回答日時:
「考えられる原因」も何も, エラーメッセージがすべてだと思う.
@INC の値はどうなってますか?
この回答への補足
(@INC contains:
/usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi
/usr/lib/perl5/5.8.5
/usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi
/usr/lib64/perl5/site_perl/5.8.4/x86_64-linux-thread-multi
/usr/lib64/perl5/site_perl/5.8.3/x86_64-linux-thread-multi
/usr/lib64/perl5/site_perl/5.8.2/x86_64-linux-thread-multi
/usr/lib64/perl5/site_perl/5.8.1/x86_64-linux-thread-multi
/usr/lib64/perl5/site_perl/5.8.0/x86_64-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl/5.8.2
/usr/lib/perl5/site_perl/5.8.1
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi
/usr/lib64/perl5/vendor_perl/5.8.4/x86_64-linux-thread-multi
/usr/lib64/perl5/vendor_perl/5.8.3/x86_64-linux-thread-multi
/usr/lib64/perl5/vendor_perl/5.8.2/x86_64-linux-thread-multi
/usr/lib64/perl5/vendor_perl/5.8.1/x86_64-linux-thread-multi
/usr/lib64/perl5/vendor_perl/5.8.0/x86_64-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl/5.8.2
/usr/lib/perl5/vendor_perl/5.8.1
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl
. /etc/httpd/
/etc/httpd/lib/perl)
実は@INCというのが何のことなのかもよくわかりません。
これで何が分かるのでしょうか?
追記
上の階層がずれていましたがcmnは
httpdocs/cmn/jcode.plです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cgiとplとpm
-
require文が実行できない
-
CGIの中にinclude
-
DBを10件毎に表示ページング...
-
エクセルで相対パスの書き方を...
-
月の第一週とは
-
毎週同じ曜日にラブホに行くと...
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
6月の第2 第4火曜日は何日...
-
Excel VBA 第〇△曜日の場合休日...
-
[C#]ListView一覧表示時の幅設...
-
SpreadDesignerの列ヘッダ
-
日本語問題 昨日は何曜日ですか...
-
フローチャート 九九
-
ルータでのMTU、MSS設定値の検...
-
今週とは何曜日から何曜日まで...
-
apacheでPerl CGIが作動せず、5...
-
ftpでのネットワークバイトオー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlからテキストを返すperlを...
-
cgiとplとpm
-
cgi-lib.plのオフラインでの使用
-
jcode.plが読み込めない
-
エラー出力をなくしたい
-
“パーミッションを変えて、実行...
-
IIS7とActivePerlを導入しまし...
-
requireについて教えてください。
-
文字の置換に関しての質問です
-
サイト構築について
-
IMGタグにaaa.cgiを指定して、...
-
Perlソースを2つのファイルに分...
-
ファイルの転送。
-
a.cgi → b.cgiへデータの受渡...
-
cgi プログラムについて
-
/httpdocsでのCGI動作を有効化
-
webからroot権限のコマンドを実...
-
perl初心者です
-
perlのcgiで、変数の中身を表示...
-
ブラウザでタグがはみ出る
おすすめ情報