PHPでたった1行で簡単にファイル削除する方法と、該当する複数のファイルを一気に削除する方法をご紹介します。
なぜかファイルを削除できないよくあるエラーも紹介します。
※ファイルを削除する際、誤って必要なファイルが削除されないよう充分注意してください。
目次
1つのファイルを削除
unlink関数で削除
ファイルを削除します。
1 2 |
// unlinkで消したいファイルを指定するだけ unlink('file.txt'); |
unlink()
を使うだけで、簡単に削除できます。
複数のファイルを削除
glob関数とunlink関数で削除
glob()
はパターンにマッチする全てのファイルを取得できます。
対象ファイル
file.txt
file2.txt
file3.txt
以下のようにforeach()
でループしながら削除していきます。
1 2 3 4 5 6 7 8 9 10 |
// 拡張子が.txtのファイルをglobで取得しループ処理 foreach (glob('*.txt') as $file) { // globで取得したファイルをunlinkで1つずつ削除していく unlink($file); // 削除済みのメッセージを表示 echo $file.'を削除しました。<br>'; } // globで取得したファイルがなくなるまでループ処理で削除していく |
file.txtを削除しました。
file2.txtを削除しました。
file3.txtを削除しました。
上記のように.txt
の拡張子が付いたファイルが削除されました。
複数のファイル削除の動作説明
先ほどのサンプルは以下のように動作しました。
- glob関数に
*.txt
を指定し、拡張子が.txt
のファイルを全て取得
globで取得した配列をforeach()
でループ処理する
※glob()
は条件に合うファイルを全て取得して、配列化してくれる
※glob()
に指定した*
(アスタリスク)はワイルドカードと呼ばれ、全ての文字列に該当するという意味
foreach (glob(‘*.txt’) as $file) { unlink()
で拡張子が.txt
のファイルを1つずつ削除していく
unlink($file);- 削除済みのメッセージを表示させる
echo $file.’を削除しました。<br>’; glob()
で取得したファイルがなくなるまで、上記の処理を繰り返す
glob()
が便利ですね。
ファイルが削除できない場合
ファイルが削除できない場合のよくあるエラーを2つご紹介します。
該当のファイルがない
対象のファイルが存在しなかったり、パスが間違っていると以下のエラーが出ます。
Warning: unlink(): No such file or directory in…
「そのようなファイルまたはディレクトリは存在しませんよ!」と言われていますね。
拡張子やファイル名は合ってるか、ディレクトリ階層をチェックしたり、パスの指定が間違っていないか再度確認してみましょう。
fopenで開いたファイルをfcloseしていない
ファイルをfwrite()
を使って書き込む際、fopen()
でファイルをオープンさせますが、最後にfclose()
をしないとたまにエラーになります。
1 2 3 4 5 6 7 8 9 10 11 |
// fopenでファイルを開く $fp = fopen('file.txt', 'w'); // fwriteでファイルに書き込む fwrite($fp, 'PHPでファイルを書き込みました。'); // fcloseを付け忘れた! // fclose($fp); // ファイルを削除する unlink('file.txt'); |
以下のようなエラーが出ます。
Warning: unlink(file.txt) [function.unlink]: Permission denied in…
一見パーミッションエラーのエラーかと思い、パーミッションを適切に設定してもこのエラーが出るので、ハマるポイントかもですね。
参考:PHPでのファイル書き込みとパーミッションエラー解決法
PHPではfclose()
をしなくてもプログラムが終了すると自動的にファイルはクローズされるので、このエラーはなかなか出ないとは思いますが、もし出たらきちんとfclose()
しましょう。