質問掲示板

CGIなどのの質問を受付ます。
現在SPAM対策の為、一部ホストアドレスを規制中。

新規発言一覧最新記事過去一覧 | 検索HOME

スレッド

└◇231:
日記SPの画像アップについて 1 [ささみ] 04/14 13:36

 └◇232:日記SPの画像アップについて 2 [ささみ] 04/14
  └◇233:Re:日記SPの画像アップについて 2 [moon(管] 04/15
   └◇236:Re[2]:日記SPの画像アップについて 2 [ささみ] 04/20
    └◇239:Re[3]:日記SPの画像アップについて 2 [moon(管] 04/21
     └◇240:Re[4]:日記SPの画像アップについて 2 [ささみ] 04/28
      └◇241:Re[5]:日記SPの画像アップについて 2 [moon(管] 04/29 <


231● 日記SPの画像アップについて 1[ ささみ ] 2005 04/14 13:36
初めまして。
日記用のCGIを変更するにあたり色々なCGIサイトを辿ってこちらの日記SPに辿り着きました。

やっと希望通りのCGIを見つけたと大喜びで早速ダウンロードし、
当方はnifty使用で画像フォルダとCGIフォルダが分かれているため、
こちらの質問板のとまるさんとのやり取りを参照に
rib.plの

# 画像アップフォルダ(背景、気分、天気)
$imgdir = './img/';

# ファイルアップロードディレクトリ(ユーザー投稿)
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$file_dir = './nikup/';
の部分を書き換えて設置しました。

その後テストしてみたところ、
とまるさんと同様に画像やアイコンのアップはできますが
表示がされない、といったような状態になっています。

フォルダは
 ├homepage/ 
 │  ├diaryicon/
 │  │ ├ 気分・天気アイコン
 │  │
 │  ├diaryimg/
 │    ├ アップした画像
 ├ cgi-bin/
 │  ├ nik_sp/
 │  │ ├ nik.cgi など
 │  │ ├ log/ などのLOGフォルダ
となっており、
気分・天気アイコン格納用の$imgdirの部分を
$imgdir = '../../homepage/diaryicon/';
画像アップ用の$file_dirを
$file_dir ='../../homepage/diaryimg/';
としました。

この状態でアイコンをアップするとアイコンのアップは出来ているようですし
日記も書け、日記の画像アップも出来ているようなのですが
日記やアイコン一覧を表示すると
画像の部分に×マークが表示されます。

その際のHTMLのソースを見てみると画像表示部分が
<img src="../../homepage/diaryicon/kibunimg_10.gif">
となっており、どうやらniftyの

※「/」からはじまる記述(絶対パス)、および「../」などからはじまる記述(相対パス)は利用できません。
CGIでイメージファイルを表示する際も同様に次のようにhttpから記述してください。
例)<img src="http://homepage?.nifty.com/****/image.gif">
(?は割り振られた数字、****はアカウントです)

という部分に引っかかっているようなのです。

当然ですが、
$imgdir = '/homepage/diaryicon/';
$file_dir ='/homepage/diaryimg/';
と、絶対パスで指定しても同様の結果でした。
スレッド一覧


232● 日記SPの画像アップについて 2[ ささみ ] 2005 04/14 13:38
$imgdir = 'http://homepage?.nifty.com/****/diaryicon/';
としてしまうと今度は画像のアップが出来なくなってしまいましたので、
アイコンや画像のアップは

$imgdir = '../../homepage/diaryicon/';
$file_dir =' ../../homepage/diaryimg/';

として、HTMLの書き出しの部分でアドレスに$imgdirや$file_dirを代入せず
http://homepage?.nifty.com/****/diaryicon/を書き込めば……と思い
rib.plで$imgdirや$file_dirが$ImgFileに代入されていましたので
nik.cgiの$ImgFileを書き換えれば何とかならないかと
浅知恵を働かせてみたのですが
該当箇所かどれなのかよく分からず、断念してしまいました。

最終手段として
$imgdir = '../../homepage/diaryicon/';
$file_dir =' ../../homepage/diaryimg/';
とした上で画像をアップした後にlogファイルを書き換えれば
何とか表示されないかなぁと思っているのですが
最初に設定しておけば良いアイコンはともかく、
画像はアップの度に、となりますと手間がかかるので
CGIの改造で何とかなるようでしたら何とかしたいのが本音です。

やっと見つけた理想通りのCGIなのでぜひ使わせて頂きたいのです。
もしかしてかなり面倒な改造になってしまうのでは……と思うのですが
何かヒントだけでもご教授頂ければと思い書き込みさせて頂きました。
お手数をおかけいたしますがご回答を頂ければ幸いです。
長文、大変失礼いたしました。
スレッド一覧


233● Re:日記SPの画像アップについて 2[ moon(管理人) ] 2005 04/15 19:19
> 最終手段として
> $imgdir = '../../homepage/diaryicon/';
> $file_dir =' ../../homepage/diaryimg/';
> とした上で画像をアップした後にlogファイルを書き換えれば
> 何とか表示されないかなぁと思っているのですが
> 最初に設定しておけば良いアイコンはともかく、
> 画像はアップの度に、となりますと手間がかかるので
> CGIの改造で何とかなるようでしたら何とかしたいのが本音です。

情熱を持って対処していただきましてありがとうございます。
そちらが特殊な状態なので、こちらではテストができませんが、
解決策を用意していただいたので、それに従うことにします。
で、どこを直せばいいのかですが、
まず、アップディレクトリは相対パス以外では多分はじかれてしまうのではと思います。
直接イメージの読み出しにも同じパスで指定してるのでだめになるのでしょう。

対処としては、記録URLにはファイルの名前だけを記録して、
書きこみ(削除)や表示のときによって、絶対パスか相対パスかを分ければいいのです。


ご承知のとおり、
$file_dir
がアップロードイメージの保存場所を指定しますね。
(ここでは$img_dirは無視します)
で、その下に
$file_dir2 = 'http://www.xxxxxxx/';
として絶対パス(アップディレクトリまで)を記述します。

rib.plの338行目辺りの
$ImgFile[$_] = "$file_dir$img_f_n" .'_' ."$_$tail[$_]";
が書きこみ命令です。
ここを
$ImgFile2[$_] = "$file_dir$img_f_n" .'_' ."$_$tail[$_]";
$ImgFile[$_] = "$img_f_n" .'_' ."$_$tail[$_]";
として、直ぐ下にある$ImgFile[$_]を$ImgFile2[$_]に変えてしまいます。
open(OUT,"> $ImgFile2[$_]") || &error("アップロード失敗");
binmode(OUT);
binmode(STDOUT);
print OUT $upfile[$_];
close(OUT);
chmod (0666,$ImgFile2[$_]);

あとは nik.cgiのなかにある$ImgFile[$_]を探して、
表示のときは
$ImgFile[$_] = $file_dir2 .$ImgFile[$_];
としてやれば表示されるはずです。
426行目辺りですか。

あと、1957行目辺りに画像を消す指定が入っています。
if (-e $_[6]) { unlink($_[6]); }
ここから下を
if (-e "$file_dir$_[6]") { unlink("$file_dir$_[6]"); }
という風にしないと画像が消えないのでここも修正したほうがいいでしょう。

多分こんな感じで大丈夫だと思いますが。
どうなんでしょう?
スレッド一覧


236● Re[2]:日記SPの画像アップについて 2[ ささみ ] 2005 04/20 16:30
お忙しい中、早々のご回答、誠にありがとうございました。
「無事表示されました」と、報告できるよう頑張ってはみたのですが
残念ながら、いまだ画像の表示はちゃんとされないままです。

まず、お教え頂いたように
rib.plの57行目付近のファイルアップロードディレクトリを
$file_dir = '../../homepage/diaryimg/';
$file_dir2 = 'http://homepage?.nifty.com/******/diaryimg/';
338行目辺りの
$ImgFile[$_] = "$file_dir$img_f_n" .'_' ."$_$tail[$_]";

$ImgFile2[$_] = "$file_dir$img_f_n" .'_' ."$_$tail[$_]";
$ImgFile[$_] = "$img_f_n" .'_' ."$_$tail[$_]";
とし、すぐ下の部分を
open(OUT,"> $ImgFile2[$_]") || &error("アップロード失敗");
binmode(OUT);
binmode(STDOUT);
print OUT $upfile[$_];
close(OUT);
chmod (0666,$ImgFile2[$_]);
に変更しました。

また、nik.cgiの中の
1597行目辺りから1617行目辺りの
if (-e $_[6]) { unlink($_[6]); }
に該当する部分を
if (-e "$file_dir$_[6]") { unlink("$file_dir$_[6]"); }
に変更(数字はそれぞれ14、19、24、29としました)

そして、426行目付近のifの条件式の後ろに
$ImgFile[$_] = $file_dir2 .$ImgFile[$_];
を入れてみたのですが
実際に画像をアップロードし表示させてみると
HTMLのソース部分に反映されておらず
a href=200504190000_1.gif
img src=200504190000_1.gif
と、画像名のみとなっておりました。
logの方には指定通り、画像ファイル名のみ記録されていましたし、
ブラウザで
http://homepage?.nifty.com/******/diaryimg/200504190000_1.gif
とアドレスを指定してやると画像の表示はされましたので
画像のアップの方は問題なく、あとは表示の問題のみのようです。

430行目辺りから441行目辺りが
画像がある場合の画像位置別の表示の指定かなと見当を付けて
その辺りの
<a href="$ImgFile[$_]" target="_blank">
<img src="$ImgFile[$_]" border="0"$sz>
に該当するそれぞれの部分を
<a href="http://homepage?.nifty.com/******/diaryimg/$ImgFile[$_]" target="_blank">
<img src="http://homepage?.nifty.com/******/diaryimg/$ImgFile[$_]" border="0"$sz>
としてみたり、
$ImgFile[$_] = $file_dir2 .$ImgFile[$_];
を入れる位置を423行目から430行目辺りまで色々変えてみたり
シングルクォートやダブルクォートで囲んで
$ImgFile[$_] = '$file_dir2' .'$ImgFile[$_]';
$ImgFile[$_] ="$file_dir2 . $ImgFile[$_]";
にしてみたりと、色々やってみたのですが
いずれも結果は同じで、ソース内に指定されているのは画像名のみでした。

ちなみに、アイコンの方はlogファイル内を
http://homepage?.nifty.com/******/diaryicon/00000.gif アイコン名
と書き換えたところ、表示されました。

何かこういう状態になるような心当たりや、当方の記述ミスが有りましたら
お時間のある時、いつでも構いませんので、
ご指摘頂けませんでしょうか?
度々お手数をおかけいたしまして申し訳ございませんがよろしくお願いいたします。
スレッド一覧


239● Re[3]:日記SPの画像アップについて 2[ moon(管理人) ] 2005 04/21 19:20
> そして、426行目付近のifの条件式の後ろに
> $ImgFile[$_] = $file_dir2 .$ImgFile[$_];

前に入れてみてください。

for (1 .. $file_m) {
    $ImgFile[$_] = $file_dir2 .$ImgFile[$_];
    if ($ImgFile[$_]) {
        undef($sz);
        $sz .= " width=\"$W[$_]\"" if $W[$_];
        $sz .= " height=\"$H[$_]\"" if $H[$_];
        if ($in{"gaz$_"} == 1) {
            print qq|<div align="center"><a href="$ImgFile[$_]" target="_blank"><img src="$ImgFile[$_]" border="0"$sz></a></div>\n|;
            print qq|$in{"comment$_"}|;
            print qq|<br>\n|;
        } elsif ($in{"gaz$_"} == 2) {
            print qq|<a href="$ImgFile[$_]" target="_blank"><a href="$ImgFile[$_]" target="_blank"><img src="$ImgFile[$_]" border="0"$sz></a><br>\n|;
            print qq|$in{"comment$_"}|;
            print qq|<br>\n|;
        } else {
            print qq|<a href="$ImgFile[$_]" target="_blank"><img src="$ImgFile[$_]" border="0"$sz></a>\n|;
            print qq|$in{"comment$_"}|;
            print qq|<br clear="all">|;
        }
    } else {
        print qq|$in{"comment$_"}|;
    }
}
スレッド一覧


240● Re[4]:日記SPの画像アップについて 2[ ささみ ] 2005 04/28 18:09
ご回答ありがとうございました。

前の部分に入れて
for (1 .. $file_m) {
    $ImgFile[$_] = $file_dir2 .$ImgFile[$_];
    if ($ImgFile[$_]) {
        undef($sz);
としてみたのですが、画像は表示されず、ソースの方も
a href=200504190000_1.gif
img src=200504190000_1.gif
と、画像名のみでした。

その後、ソースとにらめっこしながら色々と試してみた所、
716行目辺りから821行目辺りまでの
<a href="$_[6]" target="_blank"><img src="$_[6]" border="0"$sz>
に該当する部分を
<a href="http://homepage?.nifty.com/******/diaryimg/$_[6]" target="_blank">
<img src="http://homepage?.nifty.com/******/diaryimg/$_[6]" border="0"$sz>
にしてみた所、PC上で無事画像が表示されるようになりました。
画像を複数アップしても大丈夫でした。
過去の分のLOGがないので、
過去LOGで表示させた場合はどのようになるかの
確認はとれていないのですが。

もし大丈夫なようならこのまま使わせて頂こうと思っているのですが
この部分を書き換えた事により考えられる不具合は何か有りますでしょうか?
また、もしこの部分がこのままでも大丈夫な場合、
これと同じような表記が1955行目辺りから2062行目辺りまでに有ると思うのですが
この部分も同じように書き換えた方が良いのでしょうか?

それから、同日に複数の日記を別々に書いて画像をアップした場合
(時間の表示をさせない設定です)
同じ画像が表示されてしまうのですが
(例えば画像が6種類有って一つ目の日記に画像1〜3、
 二つ目の日記に4〜6をアップすると
 同日であった場合、4〜6の方も1〜3が表示されていうという状態です)
おそらく画像名を年月日時分で入れているため
時間表示させずに同日に別々に複数の画像をアップ
もしくは分まで同じで別々にアップすると
画像名がダブってしまうためだと思うのですが。
回避させる方法はやはり時間表示をさせることでしょうか?

毎回質問ばかりで申し訳ございませんがよろしくお願いいたします。
スレッド一覧


241● Re[5]:日記SPの画像アップについて 2[ moon(管理人) ] 2005 04/29 15:17
> 前の部分に入れて
> for (1 .. $file_m) {
>     $ImgFile[$_] = $file_dir2 .$ImgFile[$_];
>     if ($ImgFile[$_]) {
>         undef($sz);
> としてみたのですが、画像は表示されず、ソースの方も
> a href=200504190000_1.gif
> img src=200504190000_1.gif
> と、画像名のみでした。
>
> その後、ソースとにらめっこしながら色々と試してみた所、
> 716行目辺りから821行目辺りまでの
> <a href="$_[6]" target="_blank"><img src="$_[6]" border="0"$sz>
> に該当する部分を
> <a href="http://homepage?.nifty.com/******/diaryimg/$_[6]" target="_blank">
> <img src="http://homepage?.nifty.com/******/diaryimg/$_[6]" border="0"$sz>
> にしてみた所、PC上で無事画像が表示されるようになりました。
> 画像を複数アップしても大丈夫でした。

多分 $file_dir2 の設定がないのが原因だと思います。(多分)
$file_dir2 = 'URL';
というように設定すれば大丈夫だと思います。

> 過去の分のLOGがないので、
> 過去LOGで表示させた場合はどのようになるかの
> 確認はとれていないのですが。

私も確認していません。
というより、テストしてません。時間が取れないので
(今仕事中に返信してたりします^^;)

> もし大丈夫なようならこのまま使わせて頂こうと思っているのですが
> この部分を書き換えた事により考えられる不具合は何か有りますでしょうか?

多分大丈夫な気が。

> また、もしこの部分がこのままでも大丈夫な場合、
> これと同じような表記が1955行目辺りから2062行目辺りまでに有ると思うのですが
> この部分も同じように書き換えた方が良いのでしょうか?

変えておかないと修正とか削除とかに不具合がおきる可能性があります。

> それから、同日に複数の日記を別々に書いて画像をアップした場合
> (時間の表示をさせない設定です)
> 同じ画像が表示されてしまうのですが
> (例えば画像が6種類有って一つ目の日記に画像1〜3、
>  二つ目の日記に4〜6をアップすると
>  同日であった場合、4〜6の方も1〜3が表示されていうという状態です)
> おそらく画像名を年月日時分で入れているため
> 時間表示させずに同日に別々に複数の画像をアップ
> もしくは分まで同じで別々にアップすると
> 画像名がダブってしまうためだと思うのですが。
> 回避させる方法はやはり時間表示をさせることでしょうか?
>

ちゃんとは見てないのですが、バグな気がします。
原因はおっしゃるとおり、同日で同じファイル名になるから(だと思う)

回避は・・・日記の改造になってしまうので・・・
わかる人なら自己責任で・・・
すいません。
日記SPのほうは昔の日記通常版の改造品なので、
そのころのバグが残ったままなのです。
時間が取れてやる気が出たら今の日記から複数の画像をアップロードできるようにすれば解決されるのですが・・・
ちょっと難しい(時間がかかる)ので対応は未定です。ごめんなさい。
スレッド一覧

CGIROOM