Blogブログ

PHPでフォルダ内のファイルを全て削除またはファイル名を取得する自作関数

2012/11/21

phpでフォルダ内のファイルを全部削除したい場合がたまにあります。

そんな時に便利な関数を作ってみたいと思います。

まずはエラーがでます

//$dirは該当ファイルがあるディレクトリの絶対パス
function deleteData ( $dir ) {
	if ( $dirHandle = opendir ( $dir )) {
		while ( false !== ( $fileName = readdir ( $dirHandle ) ) ) {
			unlink ( $dir.$fileName );
		}
		closedir ( $dirHandle );
	}
}
deleteData ( $dir );

このままでも良さそうな感じもしますが、これを実行すると5行目でエラーがでます。

エラーの内容は

Warning: unlink(/削除したいファイルがあるフォルダ/.) [function.unlink]: Operation not permitted in /実行ファイルがあるフォルダ/test.php on line 19

Warning: unlink(/削除したいファイルがあるフォルダ/..) [function.unlink]: Operation not permitted in /実行ファイルがあるフォルダ/test.php on line 19

と書いてあります。

フォルダを作るとFTPソフトなどで目には見えないですが、 . と .. という物が勝手に作られてしまいます。

そしてこれを削除するのに、パーミッションで許可されていないとエラーが出てしまいます。

本当にこれが存在しているか確認するには先程のスクリプトを少し変更して

//$dirは該当ファイルがあるディレクトリの絶対パス
function deleteData ( $dir ) {
	if ( $dirHandle = opendir ( $dir )) {
		while ( false !== ( $fileName = readdir ( $dirHandle ) ) ) {
			$hideFiles[] = $fileName;
		}
		closedir ( $dirHandle );
	}
	var_dump($hideFiles);
}
deleteData ( $dir );

これで確認できるかと思います。

フォルダ内のファイルを削除する関数完成

確認が終わったら、フォルダ内のファイルを削除する関数を完成させたいと思います。

//$dirは該当ファイルがあるディレクトリの絶対パス
function deleteData ( $dir ) {
	if ( $dirHandle = opendir ( $dir )) {
		while ( false !== ( $fileName = readdir ( $dirHandle ) ) ) {
			if ( $fileName != "." && $fileName != ".." ) {
				unlink ( $dir.$fileName );
			}
		}
		closedir ( $dirHandle );
	}
}
deleteData ( $dir );

もしフォルダ内に削除したくないファイルがあるとすれば

下記行にそのファイルを付け足せばOKです。

if ( $fileName != "." && $fileName != ".." && $fileName != "index.php" ) {

フォルダ内のファイル名を一覧取得

フォルダ内のファイルを一覧取得したい場合はこれをさらに改造して、

//$dirは該当ファイルがあるディレクトリの絶対パス
function showDirFiles ( $dir ) {
	if ( $dirHandle = opendir ( $dir )) {
		while ( false !== ( $fileName = readdir ( $dirHandle ) ) ) {
			if ( $fileName != "." && $fileName != ".." ) {
				$fileNames[] = $fileName;
			}
		}
		closedir ( $dirHandle );
		return $fileNames;
	}
}
$fileNames = showDirFiles ( $dir );
var_dump ( $fileNames );

こうすることにより、ファイル名の一覧を . と .. を抜いて一覧取得できます。

他社より断然お得で使いやすい
”アクトのWEB制作”
ACTホームページ相談窓口 / 
システム開発相談窓口