PHP がファイルとディレクトリを再帰的に削除する関数_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:48:13
オリジナル
763 人が閲覧しました

PHP でのファイルとディレクトリの削除は rmdir() 関数を使用して行うことができますが、空ではないディレクトリを削除したい場合は、最初にディレクトリ内のファイルを削除する必要がありますが、すぐに削除することはできません。ディレクトリ内にサブディレクトリが存在する可能性があるため、ディレクトリの PHP 再帰的削除を実行する必要があります


再帰関数は、関数本体内で直接または間接的に自分自身を呼び出す関数です。ただし、自己呼び出しの条件を設定する必要があります。条件が満たされていなければ、関数自体が呼び出されます。 - 本関数の呼び出しを終了し、現在のプロセスを上位層関数に制御を戻して実行します。

古典的な再帰的削除関数を見てみましょう

機能: ディレクトリ配下のすべてのファイルを削除し、ディレクトリを削除します

機能コード:

コードは次のとおりです コードをコピー

関数 deldir($dirname){
If(file_exists($dirname)){//まずディレクトリが有効かどうかを判断します
$dir = opendir($dirname);//opendir でディレクトリを開きます
while($filename = readdir($dir)){//readdir を使用してディレクトリの内容をループします
If($filename != "." && $filename != ".."){// 2 つの特別なディレクトリ "." と ".." を除外します
$file = $dirname."/".$filename; If(is_dir($file)){// ディレクトリであるかどうかを判断し、ディレクトリである場合は、それ自体を呼び出します
                                                                                                                                                                                                                                                                                                                                                                                           @unlink($file);//ファイルを削除
                                                                                                                                                                                                                                                         Closedir($dir);//ファイル操作ハンドルを閉じる
rmdir($dirname);// ディレクトリを削除
}
}
?>

使用例: Public は、多くのフォルダーとファイルが含まれるフォルダーです。これを削除するには、deldir($dirname) を呼び出します。
$dir='Public';// フォルダーのパスを渡します
deldir($dir);//関数を呼び出す
?>

手順: まず、Public が存在するかどうかを確認し、存在する場合は、readdir を使用して、Public ディレクトリの内容を読み取ります。2 つの特殊なディレクトリ「.」と「..」が存在する場合は、それらを除外します。フォルダーが見つかった場合は、条件が満たされなくなるまで、フォルダー自体の処理が呼び出されます。ファイルが見つかった場合は、直接削除されます。最後にレイヤーが飛び出してPublicを削除しました。


例 2、空ではないディレクトリを削除します

コードは次のとおりです コードをコピー

/*
ファイルの削除とフォルダーの再帰的な削除が可能なカスタマイズされた削除機能
*/
関数 my_del($path)
{
if(is_dir($path))
{
$file_list= scandir($path);
foreach ($file_list を $file として)
{
If( $file!='.' && $file!='..')
{
My_del($path.'/'.$file);
}
}
@rmdir($path); //最初にフォルダーが空かどうかに関係なく、ここに到達した時点では空になっているため、このメソッドはフォルダーが空かどうかを判断する必要はありません
}
それ以外
{
@unlink($path); //これら 2 つの場所での警告エラーをブロックするには @ を使用するのが最善です。迷惑に見えます
}

}


$path='d:/技術資料 - コピー' //削除するフォルダー

;

//php ファイルが ANSI ではなく UTF-8 モードで、削除するフォルダーに中国語の文字が含まれている場合は、関数を呼び出す前にトランスコードする必要があります
//$path=iconv( 'utf-8', 'gb2312',$path );

my_del($path);

例3、成功と失敗の理由を確認できます

コードは次のとおりですコードをコピー functiondeletedir($dir){
if(!handle=@opendir($dir)){// 開かれるディレクトリが存在するかどうかを確認します
die("そのようなディレクトリはありません"); }
while(false!==($file=readdir($handle))){
if($file!=="."&&$file!==".."){// 現在のディレクトリと親ディレクトリを除外します
$file=$dir.DIRECTORY_SEPARATOR.$file
if(is_dir($file)){
削除済み($ファイル); }その他{
if(@unlink($file)){
echo"ファイル$file正常に削除されました。
";
}その他{
echo "ファイル$file削除に失敗しました!
";
}
}
}
if(@rmdir($dir)){
echo"ディレクトリ$dir正常に削除されました。
n";
}その他{
echo "ディレクトリ$dir削除に失敗しました!
n";
}
}

//テストプログラム
$dir="/var/www/test"; 削除済みディレクトリ($dir); ? >





/var/www/test フォルダーの下にフォルダーとファイル test を作成します

シェル>タッチァァァァ シェル>タッチBBB
シェル>touchccc

シェル>タッチィ
シェル>タッチフッフ
シェル>mkdir111
シェル>mkdir222
シェル>mkdir333
ここでは詳細は説明しませんが、それぞれ 111、222、333 フォルダーにファイルを作成して書き込み、アクセス許可を与えます
シェル>chown[url]www.www[/url]test-R



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632793.html技術記事 PHP でのファイルとディレクトリの削除は rmdir() 関数を使用して実行できますが、空ではないディレクトリを削除したい場合は、最初にディレクトリ内のファイルを削除する必要があります。ディレクトリは...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!