ラウンジ(兼FAQ掲示板)

shadowのhi-h0への設置法
過去ログ NO.1148217334
□ はるか [2006年05月16日20時37分]
こんにちわ、長らくご無沙汰していました、はるかと申します。
NXer氏には大変お世話になっているものです。
久しぶりにすえぽんCGIをお借りしにきました。
サーバにshadow_cgiをアップロードしましたが、早速設置に戸惑っています。

今回はサーバーがhi-hoなのでcgiを置く場所と、画像ファイルを
収納場所が別々で、おまけにCGIはcgi-bin直下でなかったら動きません、
反対に画像はcgi-binでは開かないようです。

下のように階層を作ったのですが、相対パスの設定が悪いのか、
システムエラーになります。
ファイルを呼び出すURLも下記かっこのように異なります。 
だれかhi-hoで設置して居られる人があったらサポートいただけませんか。

http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/shadow.cgi
です。尚、テストするためのシーディーアイを作って同じ領域に入れています。

http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/check.cgi
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

├ html(
http://www.kit.hi-ho.ne.jp/s-saimoto/)
|...│
|...├index.html(トップページ)
|...│
|...├bgi/
|...│
|...├image/
|...│
|...└temp/
|......│
|......└date.txt(拡張子cgiをtxtに変更)
|
└ cgi-bin(
http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/)
....│
....├shadow.cgi (775)本体
....│
....├jcode.pl(705)
....│
....└csm_mail.pl(705)
□ NXer [2006年05月17日18時32分]

>ご無沙汰
はるかさん、こちらこそ。NXerです。

>http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/shadow.cgi
>システムエラー:データ記録ファイルが開けませんでした(1)

cgiが動作して、警告どおりの意味のエラーを表示しています。
そこでは、データ入出力というこのソフトウェアの基本「システム」
のエラーを次のように調べます。

1 shadowのデータファイルへのパス(path) と/あるいは/ か
2 パーミッション

こちらでは、パーミッションの確認ができませんのではるかさんで
みてください。次はパスですが、ディレクトリ構成に忠実な道筋に
なっていますでしょうか。html直下に/shadow/ディレクトリを挿入
しています。通常は、ローカルサーバで動作検証ができるのですが
hi-hoとは違うために、考えの提供にすぎません。hi-hoの制限事項
をはるかさんのほうでも確認してください。

<http://home.hi-ho.ne.jp/support/manual/web/restrictions.html>
その7 です。-------------------------------------引用
ファイルの書き込み、読み込みをCGIで行う場合には、
必ずお客様のホームディレクトリ(環境変数$ENV{'HOME'})
を基準にお書きください。
例) お客様のhtmlディレクトリ下のファイルにアクセスする場合
"$ENV{'HOME'}/html/...." (絶対パスでは指定できません。)
------------------------------------------------------------
 
1 絶対パスでは指定できない (biglobeやniftyなどcgi許可の場合
  このパスが使えます。セキュリティのために、この措置をしている
  と思われます。)
2 1の代わりに、環境変数でホームディレクトリの値を得ています。
3 もちろん相対パスやhttp://ではじまるURLによる記述もエラーになります。

そこで初期設定を、その7の通りに書き直してみました。
-------------------------------------
$dir = "$ENV{'HOME'}/html/shadow/temp";
$img_dir = "$ENV{'HOME'}/html/shadow/image";
$bgi_dir = "$ENV{'HOME'}/html/shadow/bgi";
$up_dir = "$ENV{'HOME'}/html/shadow/temp";
-----------------------------------
これで、ファイルの書き込み、読み込みの対象である
1 作業ファイル (データと添付画像ファイル)
2 画像ファイル
3 背景画像ファイル
に、環境変数で得たホームページを基準にして下のディレクトリ
構成図に忠実な初期設定になるとものと考えました。

-----------[16日20時37分]のディレクトリ構成を一部変更
├ html(
http://www.kit.hi-ho.ne.jp/s-saimoto/)・・このhtmlがホームディレクトリ
|...│
|...├index.html(トップページ)
|...├/shadow/ ・・◎これを新設(他のcgiを増設するとして)
|.........├bgi/
|.........│
|.........├image/
|.........│
|.........└temp/ (777)・・・確認その1
|...........│
|...........└date.txt(拡張子cgiをtxtに変更)(666)・・その2
|
└ cgi-bin(
http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/)
-----------------------------

以上です。
大切なお断り:上記変更に伴う不具合発生の責任はNXerには
まったくありません。hi-hoにFAQなどがあればそちらも参考に
してください。

参考サイト
http://home.hi-ho.ne.jp/support/manual/web/restrictions.html
http://dream.lib.net/room/sys/spbbs/spbbs.cgi?act=artsel&tree=1678&art=1010594625
□ はるか [2006年05月17日21時40分]
> に、環境変数で得たホームページを基準にして下のディレクトリ
> 構成図に忠実な初期設定になるとものと考えました。
>
> -----------[16日20時37分]のディレクトリ構成を一部変更
> ├ html(
> http://www.kit.hi-ho.ne.jp/s-saimoto/)・・このhtmlがホームディレクトリ
> |...│
> |...├index.html(トップページ)
> |...├/shadow/ ・・◎これを新設(他のcgiを増設するとして)
> |.........├bgi/
> |.........│
> |.........├image/
> |.........│
> |.........└temp/ (777)・・・確認その1
> |...........│
> |...........└date.txt(拡張子cgiをtxtに変更)(666)・・その2
> |
> └ cgi-bin(
> http://www.kit.hi-ho.ne.jp/cgi-bin/user/s-saimoto/)
> -----------------------------
>
> 参考サイト
> http://home.hi-ho.ne.jp/support/manual/web/restrictions.html
> http://dream.lib.net/room/sys/spbbs/spbbs.cgi?act=artsel&tree=1678&art=1010594625

いつもながらの速球実験感謝いたします。 
そこで初期設定を、ご指摘の通りに書き直してみました。
$file = "$ENV{'HOME'}/html/shadow/temp/data.txt";★追加変更。変更しなくても同じでした。
-------------------------------------
$dir = "$ENV{'HOME'}/html/shadow/temp";
$img_dir = "$ENV{'HOME'}/html/shadow/image";
$bgi_dir = "$ENV{'HOME'}/html/shadow/bgi";
$up_dir = "$ENV{'HOME'}/html/shadow/temp";

-----------------------------------
[16日20時37分]のディレクトリ構成を一部変更
├ html
|...│
|...├index.html(トップページ)
|...├/shadow/ ・・★デレクトリーを新設して下記の三つを格納しました。
|.........├bgi/(777)
|.........│
|.........├image/ (777)
|.........│
|.........└temp/ (777)・★確認しました。
|...........│
|...........└date.txt(拡張子cgiをtxtに変更)(666)★変更しました・その2
|
└ cgi-bin


現在cgiファイルは下記のようになっています(中間略しています。)

#--------------- 設定部ここから----------------------#

# マスターパスワード(管理用:このパスワードで全ての記事が削除できます)
$master = "pass";

# このファイルの名前
$script = "shadow.cgi";

# 作業用ディレクトリ(最後に/を付けない)
$dir = "$ENV{'HOME'}/html/shadow/temp";

# ★追加です。データ記録ファイル
$file = "$ENV{'HOME'}/html/shadow/temp/data.txt";

# 画像設置ディレクトリ(http://からのURL形式でも可、最後に/を付けない)
$img_dir = "$ENV{'HOME'}/html/shadow/image";

# 投稿時の背景画像指定機能(0:無効 1:有効)
$bgi_mode = 1;

# 背景用画像設置ディレクトリ(http://からのURL形式でも可、最後に/を付けない)
$bgi_dir = "$ENV{'HOME'}/html/shadow/bgi";

# 日本語コード変換ライブラリ
require "./jcode.pl";

# ファイルのアップロード機能(0:無効 1:有効)
$up_load = 1;

# 作業用ディレクトリをhttp://からのURL形式で記述(最後に/を付けない)
$up_dir = "$ENV{'HOME'}/html/shadow/temp";

# アップロードを許可するファイルの拡張子(|で区切っていくつでも記述)
$perm_files = "gif|jpg|jpeg|png|zip|lzh|exe|mid";

# アップロードできるファイルの上限サイズ(単位:bytes [1000bytes = 1kb])
$max_size = 50000;

# ファイルロック(0:OFF 1:ON)
# 同時投稿などでデータ記録ファイル破損の恐れがある場合はONにする
$lock_mode = 0;
# 0 にしても記録ファイルには記録されます
$agent_mode = 1;
#------------------ 設定部ここまで ------------------------#
他にどんなことが考えられますか。
□ はるか [2006年05月18日07時07分]
★少し訂正しました。



> $dir = "$ENV{'HOME'}/html/shadow/temp";
> $img_dir = "$ENV{'HOME'}/html/shadow/image";
> $bgi_dir = "$ENV{'HOME'}/html/shadow/bgi";
> $up_dir = "$ENV{'HOME'}/html/shadow/temp";
> $file = "$ENV{'HOME'}/html/shadow/temp/data.txt";
> -------------------------------------
$上記のうちURL形式でも可とあるところを、下記のようにURLに訂正し
ましたら画像の一部が表示されるようになりましたが、
掲示板フォームがでてきません。
/temp/の位置を指定するパス"$ENV{'HOME'}/html/が悪いのでしょうか?

$img_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/image";
$bgi_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/bgi";
$up_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/temp";
□ NXer [2006年05月18日17時47分]

>画像の一部が表示

http://から始まるURLで画像ファイルは、たしかに、次の2)のようにアクセス
できます。NXerです。

--------------------------hi-ho から引用
アップロードファイル保存ディレクトリを http://www.○○.hi-ho.ne.jp/△△/upfile/
に作成した場合は以下のように設定します。

1)#アップロードファイル保存ディレクトリ
$upfile_dir = "$ENV{'HOME'}/html/upfile/";

2)#アップロードファイル参照パス
$upfile_url = 'http://www.○○.hi-ho.ne.jp/△△/upfile/';
------------------------------------------------------------

問題はその1)です。

shadowの作業ファイルやアプロードディレクトリに相当するものです。
上の投稿のとおりしていただき、不具合がでたとのことですが
hi-hoの説明が正しいとすると、cgiのスクリプト中でどのように
表現するのかという問題なのかもしれません。
hi-hoの形式は、正しい設定であるとしても、shadow.cgiでは
次の$dir変数をうまく処理できないと考えました。

--------------------------------------
1215 if (! open(DATA,"$dir/$file"))
----------------------------------------

$dir/$fileが、cgiに認識されるパスになるように
当方のサーバーで次のテストをして見ました。
------------------------------------------
$path = $ENV{'HOME'};
$dir1="../../../shadow/temp";
$dir=$path.$dir1;
----------------------------------------
さらに、ほぼ同じようなディレクトリ構成にしてこの代入式
をテストして見ました。

$dir="$ENV{'HOME'}/html/shadow/temp/";
ではエラーだったのに、愚案で投稿画面になりました。
他もついでに少し書き変えてテストしてみました。
-----------------------------------------
$img_dir = "$path/~xxx/shadow/image";
$up_dir = $path.$dir1;
-----------------------------------------
画像の添付も問題なし、別ウィンドウがポップアップして
表示もできます。temp内に画像ファイルが保存されています。

条件が違うことから、そのまま使えない恐れが十分ありますので
相変わらぬ、錬金術師のダ・メンチ・コードということでお笑いください。
hi-hoでのcgi設置例を検索して、より適切なスクリプトに改造
してください。
□ はるか [2006年05月19日08時17分]
いつもすみません。hansinが駄目なときはshadowも調子がでません。
ご指摘いただいた分、下記★しるしのように訂正しましたが
うまくいきません。
訂正方法がまちがっていますか、何しろパールと英数に疎い者なので・・・
よろしくです。
+++++++++++++++++++++++++++++++++++++++++++++++++
18# 作業用ディレクトリ(最後に/を付けない)★
19$path = $ENV{'HOME'};
20$dir1="../../../shadow/temp";
21$dir=$path.$dir1;

23# データ記録ファイル★
24$file = "$ENV{'HOME'}shadow/temp/data.txt";

26# 画像設置ディレクトリ(http://からのURL形式でも可、最後に/を付けない)★
27$img_dir = "$path/s-saimoto/shadow/image";

32# 背景用画像設置ディレクトリ(http://からのURL形式でも可、最後に/を付けない)
33$bgi_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/bgi";

59# 作業用ディレクトリをhttp://からのURL形式で記述(最後に/を付けない)
60$up_dir = http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/temp







> アップロードファイル保存ディレクトリを http://www.○○.hi-ho.ne.jp/△△/upfile/
> に作成した場合は以下のように設定します。
>
> 1)#アップロードファイル保存ディレクトリ
> $upfile_dir = "$ENV{'HOME'}/html/upfile/";
>
> 2)#アップロードファイル参照パス
> $upfile_url = 'http://www.○○.hi-ho.ne.jp/△△/upfile/';
> ------------------------------------------------------------
>
> 問題はその1)です。
>
> shadowの作業ファイルやアプロードディレクトリに相当するものです。
> 上の投稿のとおりしていただき、不具合がでたとのことですが
> hi-hoの説明が正しいとすると、cgiのスクリプト中でどのように
> 表現するのかという問題なのかもしれません。
> hi-hoの形式は、正しい設定であるとしても、shadow.cgiでは
> 次の$dir変数をうまく処理できないと考えました。
>
> --------------------------------------
> 1215 if (! open(DATA,"$dir/$file"))
> ----------------------------------------
>
> $dir/$fileが、cgiに認識されるパスになるように
> 当方のサーバーで次のテストをして見ました。
> ------------------------------------------
> $path = $ENV{'HOME'};
> $dir1="../../../shadow/temp";
> $dir=$path.$dir1;
> ----------------------------------------
> さらに、ほぼ同じようなディレクトリ構成にしてこの代入式
> をテストして見ました。
>
> $dir="$ENV{'HOME'}/html/shadow/temp/";
> ではエラーだったのに、愚案で投稿画面になりました。
> 他もついでに少し書き変えてテストしてみました。
> -----------------------------------------
> $img_dir = "$path/~xxx/shadow/image";
> $up_dir = $path.$dir1;
> -----------------------------------------
> 画像の添付も問題なし、別ウィンドウがポップアップして
> 表示もできます。temp内に画像ファイルが保存されています。
>
> 条件が違うことから、そのまま使えない恐れが十分ありますので
> 相変わらぬ、錬金術師のダ・メンチ・コードということでお笑いください。
> hi-hoでのcgi設置例を検索して、より適切なスクリプトに改造
> してください。
>
□ NXer [2006年05月19日17時28分]
おはようございます。NXerです。

そちらのcheck.cgiを使い、はるかさんのshadow.cgiを点検してみました。

結果:shadow.cgi Error
---------------------------------------------引用
syntax error at shadow.cgi line 66, near "http:"
syntax error at shadow.cgi line 94, near "$title_bgcol = "gainsboro"
Compilation failed in require at /00/0067/s-saimoto/cgi-bin/check.cgi line 46.
--------------------------------------------------

>パールと英数
ばかりです。前置詞 at とか in の前で区切り日本語に置き換えただけです。
日本語は(....  (....  (..)))で  
英語は  at(((..)..)..)と日英の基礎文法は、ほぼ鏡状の構成になっています。
早い話、後ろから前に訳しただけです。
--------------------試訳
shadow.cgiの行66、"http:"付近で(at)文法エラー

■60$up_dir = http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/temp

多分この↑行です。↓引用記号の初めと終わりをつけ、セミコロンを最後に付けます。
□60$up_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/temp";

同じく94行目、多分色を変更されたのかもしれません。
■ $title_bgcol = "gainsboro"
□ $title_bgcol = "gainsboro";

最後の行です。
Compilation failed in require at /00/0067/s-saimoto/cgi-bin/check.cgi line 46.

/00/0067/s-saimoto/cgi-bin/check.cgi の行 46にて perlライブラリ使用
要求(require)でコンパイルに失敗しました。

-------------------------------
# 日本語コード変換ライブラリ
require "./jcode.pl";
------------------------------まだ46行で停止中。

このエラーは、当方のローカルサーバーでは出ていません。
この相対パスも変更する必要があるかもしれません。

それから、スクリプトが実行されると次の行も問題がでるかもしれません。
■24$file = "$ENV{'HOME'}shadow/temp/data.txt";
# データ記録ファイル名なのでパスは不要と思います。
□$file = "data.txt";

check.cgiでは、記述ミスをチェックしてからコンパイルするようです。
そのため24は、文字列としてはエラーではない、と機械的に判断
しているようです。ということは、19,20,21でも実行時にはエラーの
原因になるかもしれません。

1 とりあえず、記述(文法)ミスを直す
2 画像参照関係は、もともとhttp://で始まる形式で問題なし
  であることから27行もその形式にもどす
 27$img_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/image";

そして、起動後問題なく、投稿画面に入るようにスクリプト改造の目的を
単一化されてはいかがでしょうか。環境関数の使い方がかぎの用です。
------------------------------------
19$path = $ENV{'HOME'};
20$dir1="../../../shadow/temp";
21$dir=$path.$dir1;
---------------------------------------

cgiを実行し、エラーがでたらcheck.cgiを使い、エラーコードを解読して
ください。こちらのダ・メンチ・コードは、検閲に引っかかることはあり
ませんがスクリーンに投稿画面がでないという謎を秘めています。
□ はるか [2006年05月19日23時14分]
ご親切な対応恐れ入ります、ご指示通りに設定しました、何やら
無限ルーブに陥っているようです。私のcheck.cgiでもまったく
同じエラーがでていましたが、今はシステムエラーで
ビックリマークのエラー画像がでているところです。
ちょうどすえぽんさんのラウンジが暇の時でNXerさんと2ショットできて、
ありがたいことです。こうなったらのんびりいきますので
暇なときでかまいません。そのうち最後の手段サーバパスを送ります。
一応現在の設定状況です。

18 # 作業用ディレクトリ
19 $path = $ENV{'HOME'};
20 $dir1="../../../shadow/temp";
21 $dir=$path.$dir1;

23 # データ記録ファイル
24 $file = "data.txt";

26 # 画像設置ディレクトリ
27 $img_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/image";

32 # 背景用画像設置ディレクトリ
33 $bgi_dir = "http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/bgi";

35 # 日本語コード変換ライブラリ
36 require "./jcode.pl";

59 # 作業用ディレクトリ
60 $up_dir ="http://www.kit.hi-ho.ne.jp/s-saimoto/shadow/temp";

89 $title_bgcol = "gainsboro";





> 結果:shadow.cgi Error
> syntax error at shadow.cgi line 66, near "http:"
> syntax error at shadow.cgi line 94, near "$title_bgcol = "gainsboro"
> Compilation failed in require at /00/0067/s-saimoto/cgi-bin/check.cgi line 46.
□ NXer [2006年05月21日22時15分]
>私(はるかさん)のcheck.cgiで

当方がcheck.cgiでチェックした結果です。NXerです。

1 文法エラーはでていません。(ただし、見かけです。)
2 Set-Cookie:shadow=1148079437<>1148079536<>1<><><><><><><>;
  expires=Mon, 28-Aug-2006 07:58:56 GMT; Content-type:text/html
  というメッセージが出ています。
3 shadow.cgiのエラーメッセージが出ています。

3の画像が表示されていることから、画像の参照は、http://で始まるURLで
可能である。しかし、3のメッセージから
$dir= に代入するパス指定が間違っている

2のクッキーですが、
71 # クッキーの有効期限(単位:日)
72 $cookie_term = 100;
から、28-Aug-2006 が100日後と正し
249 &set_cookie("$Clast<>$Cnew<>$Cwrite<>$Cname<>$Cmail<>$Curl<>$Cpass<>$Ctxcol<>$Cbgcol<>$Cbgi");
この行のサブ・ルーチンで設定済み。

しかし、
320行 if (! open(DATA,"$dir/$file")) で、エラーメッセージ
を返して終了しているようです。コンパイルは、今回失敗することなく
なされています。

$dirをどのように初期設定するのか、これが鍵ですね。

320/1521行のコンパイル率。2割1分のコード解読率です。なんとか
3割にしたいですね。
一定時間書込が無かったので過去ログに移りました

suepon.com | CGI作成/CGI制作 | JavaScript | ドメイン検索 | バナー自動作成 | Google ダンスツール | 松浦亜弥 | H.P.memo | パソコン | ネイル

Copyright (C) 2002 - 2009 suepon , All rights reserved. Powered by CGI Script Market.