記事No | : 15170 |
投稿日 | : 2016/10/13(Thu) 09:51:23 |
タイトル | : IISでのuse CGI::Minimalエラー |
ID情報 | : koushi |
投稿者 | : こうし |
URL | : http://???? |
掲示板 Topicsを利よさせてもらおうと思い、IISにインストールしました。 if($0 =~ /^(.*[\\\/])/) {chdir($1);}を設定しcheck.cgiでは以下のようになりました。 最後は使わないつもりです。
Check Mode: [ TopicsBoard v4.2 ]
Perlバージョン : 5.020002
ログファイルパス : OK
ログパーミッション : OK
アップロードディレクトリパス : OK
アップロードディレクトリのパーミッション : OK
テンプレート( bbs.html ) : OK
テンプレート( error.html ) : OK
テンプレート( find.html ) : OK
Image-Magick動作: NG
しかし 他のcgiでは以下のメッセージが出ます。
特にディレクトリは変更していません。
なにか問題がありましたら教えてください。
Can't locate CGI/Minimal.pm in @INC (you may need to install the CGI::Minimal module)
記事No | : 15171 |
投稿日 | : 2016/10/13(Thu) 15:03:47 |
タイトル | : Re: IISでのuse CGI::Minimalエラー |
ID情報 | : teketen |
投稿者 | : てけてん |
> if($0 =~ /^(.*[\\\/])/) {chdir($1);}を設定しcheck.cgiでは以下のようになりました。
これは、どこに記述されましたか?
use lib "./lib";
use CGI::Minimal;
より前の行に挿入されましたか?
記事No | : 15172 |
投稿日 | : 2016/10/14(Fri) 12:02:01 |
タイトル | : Re^2: IISでのuse CGI::Minimalエラー |
ID情報 | : koushi |
投稿者 | : こうし |
> > if($0 =~ /^(.*[\\\/])/) {chdir($1);}を設定しcheck.cgiでは以下のようになりました。
>
> これは、どこに記述されましたか?
> use lib "./lib";
> use CGI::Minimal;
> より前の行に挿入されましたか?
返信 ありがとうございます。
はじめの方に挿入しました。
実際 CGI:: のない check.cgiは動いています。
記事No | : 15173 |
投稿日 | : 2016/10/14(Fri) 15:44:06 |
タイトル | : Re^3: IISでのuse CGI::Minimalエラー |
ID情報 | : teketen |
投稿者 | : てけてん |
念の為に確認しますが、libディレクトリ内に、CGIディレクトリやそれに格納されているMinimal.pmとMinimalディレクトリ(Misc.pm、Multipart.pmを格納)が無いということはありませんよね?
> はじめの方に挿入しました。
う〜ん、はじめというのは、どの辺ですかね?
取りあえず、perlのパスの次の行に移動させてみてください。
もしも、既にそうなっているのなら、私にはIISの環境がないので、ちょっと分からないですね。
申し訳ないです。
記事No | : 15174 |
投稿日 | : 2016/10/14(Fri) 18:28:00 |
タイトル | : Re^4: IISでのuse CGI::Minimalエラー |
ID情報 | : hirayama |
投稿者 | : hirayama |
最近IISのシェアが伸びてきているらしいですね。
私もIISよくわからないので確認ですが、
IISでは、実行するスクリプトのあるディレクトリをカレントディレクトリと認識されないので、
if($0 =~ /^(.*[\\\/])/) {chdir($1);}
でカレントディレクトリをtopicsディレクトリに移動する。
移動しておかないと、モジュール読み込みに失敗してエラーになる。
ということでしょうか。
このため、モジュール読み込みより前にchdir部分を入れる必要があるということだと思いますが、
use関数はコンパイル時に評価されるので、スクリプトのどこに書かれていても
最初に実行されてしまうのではなかったかと思います。
useではなくrequireに変えるか、
use lib "./lib";を絶対パス表記に変えるか、
あるいは以下のように、use 部分を文字列とした上でevalで評価してみてはどうでしょうか。
eval 'use strict;
use CGI::Carp qw(fatalsToBrowser);
use lib "./lib";
use CGI::Minimal;';
記事No | : 15175 |
投稿日 | : 2016/10/14(Fri) 21:09:26 |
タイトル | : Re^5: IISでのuse CGI::Minimalエラー |
ID情報 | : teketen |
投稿者 | : てけてん |
> use関数はコンパイル時に評価されるので
そうでした。
すっかり忘れてました。
BEGIN {
if($0 =~ /^(.*[\\\/])/) {chdir($1);}
}
と、BEGIN { }内に入れれば良いかもしれませんね。
記事No | : 15177 |
投稿日 | : 2016/10/16(Sun) 00:54:40 |
タイトル | : Re^6: IISでのuse CGI::Minimalエラー |
ID情報 | : hirayama |
投稿者 | : hirayama |
BEGIN 使う方がスマートですね。
蛇足ですが、useとBEGIN両方使った場合、
どちらが先に実行されるか実験したところ
先に書かれた方でした。
記事No | : 15183 |
投稿日 | : 2016/10/17(Mon) 11:58:50 |
タイトル | : Re^7: IISでのuse CGI::Minimalエラー |
ID情報 | : koushi |
投稿者 | : こうし |
> BEGIN 使う方がスマートですね。
>
> 蛇足ですが、useとBEGIN両方使った場合、
> どちらが先に実行されるか実験したところ
> 先に書かれた方でした。
てけてんさん hirayamaさん
いろいろありがとうございました。
動きました。
初心者なもので どうしていいかわからず困っていました。
本当に助かりました。