PHP-递归扫描目录和删除目录

(1) 通过递归扫描目录并打印

// php递归扫描目录
function scanMyDir($path){
    // 打开目录
    $dh = opendir($path);
    echo ‘<ul>‘;
    // 循环读取目录
    while(($file = readdir($dh)) !== false){
        // 先要过滤掉当前目录‘.‘和上一级目录‘..‘
        if($file == ‘.‘ || $file == ‘..‘) continue;
        // 为了能够显示中文目录/文件,需要进行转码
        echo ‘<li>‘.iconv(‘gbk‘,‘utf-8‘,$file).‘</li>‘;
        // 如果该文件仍然是一个目录,进入递归
        if(is_dir($path.‘/‘.$file)){
            scanMyDir($path.‘/‘.$file);
        }
    }
    echo ‘</ul>‘;
}
$path = ‘e:/Music‘;
scanMyDir($path);

需要注意的地方:

①在读取目录的时候,会读取.和..,分别表示当前目录和上一级目录,需要过滤掉它们以进行后续的打印和操作。

②中文操作系统默认的编码是gbk,因此目录与文件的编码为gbk。想要在网页上显示的时候没有乱码,需要通过iconv函数进行转码。

③这一份代码是用无序列表来显示目录结构的。还有一种办法:可以添加一个递归深度$deep作为函数的参数,默认为0,每一次递归加1。这样不同的层级就拥有了不同的递归深度,通过str_repeat()函数来利用递归深度,就能让目录结构分出层次了。

(2) 通过递归删除目录及目录下的文件

// php递归删除目录和文件
function delAll($path){
    // 打开目录
    $dh = opendir($path);
    // 循环读取目录
    while(($file = readdir($dh)) !== false){
        // 过滤掉当前目录‘.‘和上一级目录‘..‘
        if($file == ‘.‘ || $file == ‘..‘) continue;
        // 如果该文件是一个目录,则进入递归
        if(is_dir($path.‘/‘.$file)){
            delAll($path.‘/‘.$file);
        } else {
            // 如果不是一个目录,则将其删除
            unlink($path.‘/‘.$file);
        }
    }
    // 退出循环后(此时已经删除所有了文件),关闭目录并删除
    closedir($dh);
    rmdir($path);
}
$path = ‘./test‘;
delAll($path);

需要注意的一点是:只有当这个目录不是工作状态的时候,才能进行删除。所以必须要先通过closedir()关闭目录,并且确保在计算机中也退出了该目录,再进行删除的操作。

时间: 2024-11-04 19:07:25

PHP-递归扫描目录和删除目录的相关文章

递归拷贝目录与删除目录

/*判断一个路径是否是已存在的目录*/ bool IsDirectory(const std::wstring& pstrPath) { DWORD dw = GetFileAttributes(pstrPath.c_str()); if (dw == INVALID_FILE_ATTRIBUTES) { return false; } return (dw & FILE_ATTRIBUTE_DIRECTORY) != 0; } /*复制目录及目录中的所有内容*/ bool CopyFol

(实用篇)PHP不用递归遍历目录下所有文件的代码

<?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ function scanfiles($dir) { if (! is_dir ( $dir )) return array (); // 兼容各操作系统 $dir = rtrim ( str_replace ( '\\', '/', $dir ), '/' ) . '/'; // 栈,默认值为传入的目录 $

Android6.0 PKMS扫描目录和调用接口安装应用的区别

android安装应用分两种,一种是直接调用PKMS的接口安装,另一种是扫描目录安装,比如系统开机的时候会扫描data/app目录进行安装. 一.调用installPackageAsUser函数安装 我们先来看调用接口应用安装应用,都会通过如下函数,这个函数先会通过传进来的uid来判断是否是adb安装的,然后创建了一个InstallParams对象这个对象是HandlerParams的子类,然后发送消息. @Override public void installPackageAsUser(St

第5个程序,Java 去掉版权信息! 递归扫描文件夹,并且把整个文件夹内以html结尾的文件里的文字替换为自己想要的文字。

这是我的第5个程序 虽然这五个程序都是非常小的程序,但是写完后很开心...满满都是最最最基础的知识点,可是把这些东西组合起来简直日了狗了.竟然可以这样!竟然会那样!一路改错,改到差点怀疑人生.尤其是递归里面的两个嵌套的if 那逻辑!日了整个地球的狗.起先是用&连起来的,卡了半年,胡子都白了...后来发现,原来被别的地方锁死了!!!所以只能if 里面套一个if...看上去并没有什么特别的一个小程序,自己纯原创写的时候,150ms的延迟,1500的暴击,满地图都卡.死了...让我平复一下激动兴奋的心

Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件

本文主要实现了扫描指定文件路径下的文件,递归扫描其子目录下的所有文件信息,示例文件为: 要求将后缀为.dat的文件夹信息也写入到数据库中,然后将.chk文件解析,将文件中对应的内容读出来写入到数据库,对应类为ChkFileParseFactroy,本文文件发现代码为: 1 package com.src.service.impl; 2 3 import java.io.File; 4 import java.net.InetAddress; 5 import java.net.NetworkIn

Python递归遍历目录下所有文件

#自定义函数: import ospath="D:\\Temp_del\\a" def gci (path): parents = os.listdir(path) for parent in parents: child = os.path.join(path,parent) #print(child) if os.path.isdir(child): gci(child) # print(child) else: print(child) gci(path) #使用os.walk方

递归读取目录内容

$path='E:/wamp/phplianxi/';$nested_list = readDirSNested($path, 0);echo '<pre>';var_dump($nested_list);/** * 递归读取目录内容 * @param string $path 需要读取的目录内容 * @return void */function readDirSNested($path) { $nested = array();//存储当前目录下所有内容 $handle = opendir

php 递归求得目录大小

/* * 递归求得目录大小 * @param $dir 目录 */ function dirsize($dir){ $allsize = 0; $handle = opendir($dir); while($file = readdir($handle)){ if($file != '.' && $file != '..'){ $file = $dir . '/' . $file; if(is_dir($file)){ $allsize += dirsize($file); }else{

php递归取目录下的所有文件(原创)

function getdirallfiles($path) { $result=array(); $temp=array(); $dir=scandir($path); if($dir===false) { }else { foreach($dir as $value) { if($value!='.'&&$value!='..') { if(scandir("$path/$value")===false) { $result[]="$path/$value