• 締切済み

PHPのファイル削除についての質問です。

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); } } } ?>

みんなの回答

noname#244856
noname#244856
回答No.6
noname#244856
noname#244856
回答No.5

../images/slider/ab.jpg ../images/slider/cde.jpg ../images/slider/12.jpg ../images/slider/035.jpg といったパスにマッチするファイルを全部削除したいだけだったら array_map('unlink', glob('../images/slider/*.jpg')); の1行で済みます。

  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.4

> それから質問の続きなんですが、ディレクトリにあるファイルすべてではなく、一つずつ削除という形でやっていきたいと思うのですが、その場合はどのようにすればよろしいでしょうか。 まず、ディレクトリ内のファイル一覧を取得して表示するページを用意します。 そのページでファイルを選択させ、削除するファイルのファイル名を削除プログラムに渡して、指定されたファイル名のファイルを削除するといった流れでしょうかね。

  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.3

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

miracle21
質問者

補足

ご解答ありがとうございます。 確かにforeachが原因の一つだと思います。 そこの部分を削除したらこのエラー(Cannot redeclare deletedata())は確かに出なくなりました。 それから質問の続きなんですが、ディレクトリにあるファイルすべてではなく、一つずつ削除という形でやっていきたいと思うのですが、その場合はどのようにすればよろしいでしょうか。 今のままですと全て消えてしまいます。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

……いや、これ foreach の中で関数定義していないか? PHP でこういうのアリだったけ? もしそれが OK だとしても、これだとただファイルを削除する関数を定義してるだけじゃないのかなぁ。

  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.1

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

関連するQ&A

専門家に質問してみよう