サーバ移行にともない、新Webサーバを構築中です。

それで、旧サーバと新サーバでrequire '○○.pl';
などの、require を使用する時の置き場所が
いまいちわかりません。
以前は、

Inetpub
 └scripts
    └wwwmail2
       └test

というフォルダ構成で、testフォルダのなかに
test.plという、動かしたいperl本体と、
requireの.plを全部入れて動いていましたが、
新WWWサーバでは、requireするperlを
Scriptsフォルダの下に置かないと、動かなくなりました。
(Scriptsの配下のwwwmail2-testの中にrequireの.plを
入れたのでは動かなかった。)
ディレクトリの設定をどこかでしなくてはいけないのでしょうか。
この質問の仕方で不安ですが、よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

サーバのOSは?


使用しているWebサーバは?

 Inetpubってフォルダの名前から、勝手にWindows系のOSで、IISを使用していると過程します。

 1番確実な方法は、
 旧サーバの設定と新サーバの設定を見比べて下さい。多分、エイリアスの所か、ディレクトリの設定の所で、実行権の違いが見つかるとおもいます。
 それをチェックして見て下さい。
 またそれをおこなっても動かない場合には、そのディレクトリ自信の所有権等の事を確認して下さい。
    • good
    • 0

require は、絶対パスで記載しても大丈夫なので、


require '/home/ryouchi/src/hoge.pl';
といった指定で大丈夫のような気がします。
ただアクセス権の指定は必要かもしれません。
httpdがアクセスできるようにファイルとディレクトリにパーミッションを設定しておく必要はあります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q'cgi-lib.pl'などのファイルの位置は?

Perlの基本的な質問ですが、cgi-lib.plやjcode.plは
どのディレクトリに入れれば自然でしょうか?
私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。
WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、
しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

Aベストアンサー

Perlは、探索パスを保持している「@INC」という特殊配列変数からモジュールを検索します。
パスの一番最後には「.」がありますので、最後にはcgiが実行されるカレントにある
モジュールが見つかります。

# perl -e 'print @INC'

/usr/local/lib/perl/5.6.1 /usr/local/share/perl/5.6.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.6.1 /usr/share/perl/5.6.1 /usr/local/lib/site_perl .


@INCに 以下の様に明示的に、自分専用の探索パスをセットする方法もあります。

use /my_home/cgi-bin/mylib
require cgi-lib.pl

Qperl ver5.24.0 x68版で、requireを使ったライブラリの呼び出しでエラー

現在ローカルで、perlを使って自作のcgiを作成しているのですが、
最近、perl ver5.12.4→ver5.24.0にしたのですが、
「ver5.12.4をファイルシュレッダーにかけて削除し、ver5.24.0をインストしました」

問題なくインストールは終了し、ローカルサーバーを立ち上げてブラウザで,
作成途中のcgiにアクセスした所、
エラーが出まして、requireの呼び出しの行でエラーになっています。

↓呼び出し行は↓
require './jcode.pl';

自分では、全く理解できないので、一度ver5.24.0を削除し、再びver5.12.4を、
インストールした所、問題なくrequireを使ったライブラリの読み込みに成功しました。

バージョンが、0.12も上がっているので、上記の呼び出し方法では駄目なのでしょうか?
もしくは、jcode.pl自体に問題があるのでしょうか?
下記のjcode.plは、最後の行に真を返す「1」が記載されているので、問題はないと思うんですが。。

詳し方のご伝授して下さい。
よろしくお願い致します。

現在ローカルで、perlを使って自作のcgiを作成しているのですが、
最近、perl ver5.12.4→ver5.24.0にしたのですが、
「ver5.12.4をファイルシュレッダーにかけて削除し、ver5.24.0をインストしました」

問題なくインストールは終了し、ローカルサーバーを立ち上げてブラウザで,
作成途中のcgiにアクセスした所、
エラーが出まして、requireの呼び出しの行でエラーになっています。

↓呼び出し行は↓
require './jcode.pl';

自分では、全く理解できないので、一度ver5.24.0を削除し、再びver5.12.4を、...続きを読む

Aベストアンサー

○500 internal Server Error ってのは、それだけでは解決のヒントはほぼ0です。
サーバーのログとか、 CGI::Carpを使うなどして、詳しいエラー内容を確認しましょう。
http://perldoc.jp/docs/modules/CGI-2.89/CGI/Carp.pod


○あまり変わっていないように見えるPerlですが、以外と「互換性の無い変更」があります。
マニュアルの perldelta に変更履歴が載っています。


おそらくは、これではないかと。
http://perldoc.jp/docs/perl/5.22.0/perl5220delta.pod#defined40-64array41-32and32defined40-37hash41-32are32now32fatal32errors

○ jcode.plを使う積極的な理由が無いなら、そろそろ他の方法を使うことも考えましょう。

Q拡張子を.plにしたら動くけど.cgiにしたら動かない(初歩的)

バカな質問にお答えお願いします。

windows2000
IIS5.0 使用
activeperl?

perlというのを練習でいろいろ
簡単なものを作っています。

自分のPCだけで、動かしてます。
無事動いているのですが、

拡張子を.cgiにすると

%1 なんとかエラー

みたいなのになってしまいます。
なんででしょう?

Aベストアンサー

IISの関連付けがされていないのではないでしょうか?

参考URLは、WindowsXPですが参考になると思いますよ。

ちなみにこういった場合、エラーメッセージをそのままgoogleなどで検索すると解決方法が書かれているサイトが見つかる場合が多いですよ。

参考URL:http://www.mikeneko.ne.jp/~lab/perl/iis/#h1-4-3

Qperl でrequireされたファイル自身のフルファイル名を取得する

perl でrequireされたファイル自身のフルファイル名を取得する方法を教えてください

__FILE__ だとパス情報がありません。

また 起動したスクリプトではないので
$ENV["SCRIPT_FILENAME"] , $0
では、取得できません。

どこに格納されているのでしょうか?
%INCでは、無理ですし、@INCを使う方法では、信憑性にかけます

requireするときにパスをグローバル変数に代入せずに
どうしてもrequireされたファイル自身で
確実に正確な同じフォルダ名を取得する必要があるのでお願いします。

(※phpでは、__FILE__でフルパスで返ってくるので私の探し方が悪いだけだと思っています)

perlでの取得方法の情報を
お手数ですがよろしくお願いします

Aベストアンサー

use Cwd 'abs_path';
print abs_path(__FILE__);

または

use File::Spec;
print File::Spec->rel2abs(__FILE__);

どちらも標準モジュールのようなので、すぐ利用可かと。

QPerlで フォルダ内の全てのファイルを別のフォルダにコピーするには

お世話になります。
多分ご存知の方には簡単な話だと思いますが教えていただけませんか。
Aフォルダにあるhoge.txtをBフォルダにコピーしたければ
use File::Copy;
copy "./A/hoge.txt", "./B/hoge.txt" or die $!;
で出来るのはわかっているのですが、Aフォルダにある全てのファイルをBフォルダにコピーするというのはどのようなコードを書いたらよいのでしょう。
ちなみにAフォルダには100以上ファイルがあります。ファイルは全部テキストファイルです。

Aベストアンサー

$src_dir = "./a";
$dst_dir = "./b";

opendir(DIR, "$src_dir");
my @Files = grep { -f "$src_dir/$_" && /\.txt/ } readdir(DIR);
closedir DIR;

foreach my $file (@Files) {
copy ...
}

こんな感じですかね


このカテゴリの人気Q&Aランキング

おすすめ情報