1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PHP实现删除文件夹内的文件的功能

PHP实现删除文件夹内的文件的功能

时间:2023-10-18 00:32:15

相关推荐

PHP实现删除文件夹内的文件的功能

PHP实现文件夹内的文件删除功能,大多会用到unlink这个函数。如果要删除指定的文件直接unlink(文件地址),如果要删除一个文件夹内的所有文件,肯定要遍历文件夹,或者找到一个函数能够知道文件夹内是不是有东西,如果有文件,就继续删除,删除哪一个,那么又需要一个函数实现得到文件夹内某个文件的文件名的功能。

关于遍历文件夹 PHP中在文件系统相关扩展中,有Directory这个库,

关于这个函数的功能和语法

那么如果系统中有文件就会返回文件名,要注意的是在使用readdir之前,必须要先使用opendir,如果不存在该文件夹就会出现报错,failed to open dir

如果存在文件夹,但是文件夹内没有文件那么就是出现两个. .. 点号,这个点号表示什么,暂时还不清楚。

在遍历读取文件夹使用了 false !==($file=readdir(‘文件夹路径’)),也就是如果能够从文件夹路径读到东西 那么我就可以输出我们的文件名。

<!DOCTYPE html><html><head><title></title><meta charset="utf-8" /></head><body><?php$handle = opendir('./shanchu');while (($file=iconv('gbk','utf-8',readdir($handle)))) {echo "$file\n";}closedir($handle);?></body></html>

其中,在刚开始的时候读出的文件名出现了乱码,应该系统文件编码格式的问题,简单查了一下,发现了一般新建记事本文件文档默认的编码格式是ANSI编码,为了防止这个编码出现乱码,所以就在读取的文件名中加入了iconv改变读取文件名的编码格式。

最后涉及到删除文件夹,使用到unlink这个函数,如果读到文件的名字,那么直接使用文件名删除就可以了。

<?php $file ='./delete.txt';if (!unlink($file)){echo ('Error deleting $file');}else{echo "Deleted $file";}?>

如果文件夹里面是纯文件,那么直接可以通过unlink直接删除

<?php$handle = opendir('./shanchu');while (($file=readdir($handle))) {unlink("./shanchu/"."$file");}closedir($handle);?>

如果是文件夹内有文件夹那么需要用到其他函数rmdir

所以最后的代码思路应该是这样,

<?php$handle = opendir('./shanchu');while (false !==$file = readdir($handle)){if ($file !='.' && $file != '..'){$file_fullpath = './shanchu'."/".$file;echo iconv('GBK', 'utf-8', $file_fullpath);echo "<br />";if (!is_dir($file_fullpath)){unlink($file_fullpath);}else{rmdir($file_fullpath);}}}?>

上面这个函数应该是最底层的函数,因为rmdir这个函数只能删除空文件夹,所以,当文件夹中有文件夹的时候,首先就是要把文件夹里面的内容全部删除,所以前面可以有一系列的判断,这些判断是嵌套的,也就是说我要判断这个文件夹里面里面的是文件还是文件夹,如果是文件,那么删除,如果是文件夹呢,那么就先判断是不是空,如果空,则删除,如果不是空,那么就进去删除里面的文件和文件夹。

所以代码的基本逻辑就是 如果是文件夹就进行一次判断 然后循环知道文件夹为空删除文件夹。

刚刚开始写这段代码,虽然我的初始想法也是函数调用它本身,但是不清楚PHP是不是具有这样的一个功能,所以最后试图自己写出来一个类似的效果,结果发现,还是会走到递归上面。

所以顺便就了解了一下递归函数的用法和一些基本概念。

因为文件夹内的文件夹是有限的,所以递归最终是有终点的,遇到文件夹就重复调用原来的函数,然后删除文件夹之后返回上一层。最终实现一个删除文件夹的功能。

<?function deldir($dir) {//先删除目录下的文件:$dh=opendir($dir);while ($file=readdir($dh)) {if($file!="." && $file!="..") {$fullpath=$dir."/".$file;if(!is_dir($fullpath)) {unlink($fullpath);} else {deldir($fullpath);}}}closedir($dh);//删除当前文件夹:if(rmdir($dir)) {return true;} else {return false;}}?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。