PHP | unlink()で複数のファイルを削除する方法

PHP ファイル・ディレクトリ,PHP

PHP | unlink()で複数のファイルを削除する方法

PHPのunlink()を使ってファイルまたは複数のファイルを削除する方法の紹介です。

unlink()について

PHPのunlink()は引数に削除するファイルのパスを指定することで、そのパスにある特定のファイルを削除することができます。

unlink(ファイルのパス)

unlink()にワイルドカード(*)は利用できません。

オプション引数

unlink()はPHP5.0よりコンテキストのサポートが追加されました。
詳細は PHP: ストリーム – Manual にて。

unlink()でファイルの削除する

unlink()で単体のファイルを削除するサンプルコードです。

unlink('test.txt');

上記の例では、実行するPHPファイルと同じディレクトリにある「test.txt」を削除します。

unlink()で複数のファイルの削除する

unlink()で単体のファイルを削除するサンプルコードです。

ディレクトリ内のファイルを全て削除

foreach ( glob('dir/*') as $file ) {
	unlink($file);
}

上記の例では、実行するPHPファイルと同じディレクトリにあるファイルを全て削除します。

glob()は、パターンにマッチするパス名を探します。
ワイルトカードが利用できるので利用します。

※上記のサンプルのように対象のディレクトリを指定しない場合、実行するPHPファイルも削除対象に指定されるので実行時に消えてしまいますので、上記のコードのままを使う場面はあまりありません。

通常はディレクトリを指定して、ファイルを削除します。

foreach ( glob('dir/*') as $file ) {
	unlink($file);
}

上記の例では、指定したディレクトリ以下にあるファイルを全て削除します。

この場合、指定したディレクトリ以下にディレクトリが存在した場合「Is a directory」というエラーとなりますので、対象のディレクトリの中身がファイルしかないと確認できる場合には有効です。

拡張子を指定してディレクトリ内のファイルを削除

foreach ( glob('dir/*.txt') ) as $file ) {
	unlink($file);
}

上記の例では、指定したディレクトリ(dir)内の拡張子が.txtのファイルを全て削除します。

複数の拡張子を同時に指定することも可能です。

foreach ( glob('dir/{*.jpg,*.png,*.gif}') ) as $file ) {
	unlink($file);
}

上記の例では、指定したディレクトリ(dir)内の拡張子が.jpg、.png、.gifのファイルを一括で削除します。

unlink()で発生する主なエラー

unlink()でのエラーには以下のものがあります。

No such file or directory

指定したファイルやディレクトリが存在しない場合に表示されるエラーです。

Permission denied

指定したファイルに対する権限がない場合等に表示されるエラーです。

Is a directory

削除する対象にディレクトリが指定されている場合に表示されるエラーです。