プロが教える店舗&オフィスのセキュリティ対策術

PHPについての質問です。
現在、自社サイトで使用している画像の管理画面を作っているのですが、
PHPを使って不要になった画像を削除する部分を作成しております。
しかし、まだ何分初心者なのでわからないところもあり質問させていただきました。

削除用のPHPファイルを作成しておりますが、動作すると以下のエラーが出てしまいます。
Fatal error: Cannot redeclare deletedata() (previously declared in ・・・・・・・・・/php/delete.php:5) in ・・・・・・・・・・・/php/delete.php on line 5

組んだプログラムに問題があると思いますが、この場合どのようにすればよろしいでしょうか。
分かる方アドバイスをお願いします。

<?php
$no = 1;
foreach(glob('../images/slider/*.jpg') as $val){

function deletedata($dir) {
if($dirhandle = opendir($dir)) {
while(false !==($val = readdir($dirhandle))) {
if($val != "." && $val != "..") {
unlink($dir.$val);
}
}
closedir($dirhandle);
}
}
}
?>

A 回答 (6件)

    • good
    • 0

../images/slider/ab.jpg


../images/slider/cde.jpg
../images/slider/12.jpg
../images/slider/035.jpg

といったパスにマッチするファイルを全部削除したいだけだったら

array_map('unlink', glob('../images/slider/*.jpg'));

の1行で済みます。
    • good
    • 0

> それから質問の続きなんですが、ディレクトリにあるファイルすべてではなく、一つずつ削除という形でやっていきたいと思うのですが、その場合はどのようにすればよろしいでしょうか。



まず、ディレクトリ内のファイル一覧を取得して表示するページを用意します。
そのページでファイルを選択させ、削除するファイルのファイル名を削除プログラムに渡して、指定されたファイル名のファイルを削除するといった流れでしょうかね。
    • good
    • 0

よくよく見れば foreach の中で関数定義しちゃってますね。


これでは何度も関数定義が実行されるので Cannot redeclare deletedata() って言われちゃいますね。

この回答への補足

ご解答ありがとうございます。
確かにforeachが原因の一つだと思います。
そこの部分を削除したらこのエラー(Cannot redeclare deletedata())は確かに出なくなりました。

それから質問の続きなんですが、ディレクトリにあるファイルすべてではなく、一つずつ削除という形でやっていきたいと思うのですが、その場合はどのようにすればよろしいでしょうか。
今のままですと全て消えてしまいます。

補足日時:2014/11/10 17:25
    • good
    • 0

……いや、これ foreach の中で関数定義していないか? PHP でこういうのアリだったけ?


もしそれが OK だとしても、これだとただファイルを削除する関数を定義してるだけじゃないのかなぁ。
    • good
    • 0

deletedata() 関数を定義しているファイルを何度もincludeしていませんか?


「Cannot redeclare deletedata()」は deletedata という名前の関数を何度も定義しようとした場合に出るエラーです。
よくやる間違いは複数個所で同じファイルをincludeしているケースです。
関数定義をしているファイルを読み込む場合は require_once や include_once を使用すると問題は起きないと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!