KENT-WEB サポートコーナー 過去ログ [ 0391 ]


記事No: 15170
投稿日: 2016/10/13(Thu) 09:51:23
タイトルIISでのuse CGI::Minimalエラー
ID情報: koushi
投稿者: こうし
URLhttp://????

掲示板 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さん
いろいろありがとうございました。
動きました。 
初心者なもので どうしていいかわからず困っていました。
本当に助かりました。


[検索ページ] [掲示板]