- 締切済み
jcode.plが読み込めない
ホスティングを使用しています。 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行を外すとページはきちんと表示されます。 となると考えられる原因はなんでしょうか? そして対策方法を教えて頂ければと思います。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pick52
- ベストアンサー率35% (166/466)
本体のスクリプトのファイル名が 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 に対して行うように するとスクリプトのあるディレクトリがカレントディレクトリになり ます。 ただし、すべての環境で動作するかどうかは分かりません。
- Tacosan
- ベストアンサー率23% (3656/15482)
調べればわかるんだけど, @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 の中の「.」は「スクリプトのあるディレクトリ」ではなく「スクリプトを実行するときのディレクトリ」です. だから, これは「スクリプトのあるディレクトリ」を指すとは限りません. 念のため.
- Tacosan
- ベストアンサー率23% (3656/15482)
「考えられる原因」も何も, エラーメッセージがすべてだと思う. @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です。
補足
それで具体的にどうすればいいのかな #!/usr/bin/perlパスはついているし その下に #!/usr/lib/perl5/5.8.5/ とかパスを書き足しても解決できないのですが