こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Perl BBS掲示板 サーバ側のファイル削除

いつもお世話になっております。
サーバ側のファイルを削除したいのですが、
どのようにすればいいのでしょうか・・・?

#-----------------------------------------DELETE
sub deletedata
{
use CGI;
my $form = new CGI;
my $tm = time;
my $DELETE = $form->param('pass');
my $NO = $form->param('no');
my $NAME = TransFormdata($form->param('name'));
my $TITLE = TransFormdata($form->param('title'));
my $TEXT = TransFormdata($form->param('text'));
my $img = TransFormdata($form->param('img'));

open(FILE, "<$FILE") or die("error :$!");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;
my $DELETE = $form->param('pass');
my $NO = $form->param('no');
if(length $NO == 0)
{}
elsif($DELETE eq $PASSWORD)
{
deleteImg($NO);
splice @DATA, $NO, 1;
}

else{}
open(FILE, ">$FILE") or die("error :$!");
eval{ flock(FILE, 2) };
print FILE @DATA;
close FILE;
&endform
}


#-----------------------------------------DELETE

#-----------------------------------------UPFILEDELETE
sub deleteImg
{

my ($NO,$tm,$NAME,$TITLE,$TEXT,$imgname) = split(/,/, $DATA[$_[0]]);
$filename = $DIR . $imgname;
if(-e $imgname) {
unlink $filename;
}
}
#-----------------------------------------UPFILEDELETE

ラジオボタン選択

パスワード入力

削除ボタン

削除

この段階で
テキストファイルの指定行は削除されているのですが、
画像が投稿され、サーバー側に残っているファイルも削除させたいのです。
Unlinkを使うとなっていたのですが・・・わからないです。

どうかご教示お願い致しますm(;;)m

投稿日時 - 2017-02-21 10:51:09

QNo.9296400

困ってます

質問者が選んだベストアンサー

>サーバー側に残っているファイルも削除させたいのです。

sub deleteImg
の中で
my ($NO,$tm,$NAME,$TITLE,$TEXT,$imgname) = split(/,/, $DATA[$_[0]]);
$filename = $DIR . $imgname;
の2行で「消すべき画像のファイル名」を作成して
if(-e $imgname) {
のif分で、そのファイル名のファイルが存在しているか確認して、存在しているなら
unlink $filename;
で、サーバー上からそのファイルを削除しようとしているけど、判定するファイル名が間違っているのでバグっている。

if(-e $imgname) {
ではなくて
if(-e $filename) {
なのではないか?

$imgnameには「ファイル名だけ」しか入ってないから、if文は「そのファイルは無い」と判断しちゃうと思う。

投稿日時 - 2017-02-21 12:25:02

補足

ご回答ありがとうございます

初めそうではないかと思い、filenameでしてたのですが、うまくいかなかったです・・・

ファイル名が間違っているということは
そもそもフォルダ自体間違ってる可能性もあるということでしょうか?

$DIR = サーバーのフルパスをしてます。

投稿日時 - 2017-02-21 13:22:17

お礼

ありがとうございました。
なぜか、拡張子が読み取れていなかったみたいで、
sub deleteImg
{

my @delete = split(/,/, $DATA[$_[0]]);
@arry=(".gif",".png",".jpg");
for ( @arry ) {
$filename = $DIR . $delete[0] . $_;
if(-e $filename) {
unlink $filename;
}
}
}

とりあえずこのように記述することで、解決できました

投稿日時 - 2017-02-24 10:40:23

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)