PHP 删除文件夹和文件夹下的所有文件
在 PHP 网站中可能会遇到需要用 PHP 删除文件夹的情况,例如一些网盘或在线文件管理等。最近我开发的一个在线文件管理器就需要用 PHP 删除文件夹。在开发删除功能的时候遇到了一个问题,PHP 删除文件夹的函数 rmdir
只能删除空文件夹,在遇到非空文件夹的情况下就会报错。要解决这个问题只能写一个自定义函数或方法,这里我就记录一下我写的函数,可以直接调用。
函数代码
<?php
// 删除文件或文件夹,接收一个数组,支持批量删除
function delete($fileName = array()) {
$success = array(); // 记录已删除的文件
// 如果数组为空
if (count($fileName) < 1) {
return array(
'result' => false,
'info' => '文件名不能为空!'
);
}
for ($i = 0;$i < count($fileName);$i ++) {
// 文件是否存在,如果不存在就跳过
if (file_exists($fileName[$i])) {
// 是否是文件夹
if (!is_dir($fileName[$i])) {
// 如果不是文件夹就直接删除
if (unlink($fileName[$i])) {
// 如果删除成功就把文件名添加到已删除文件的数组
array_push($success, $fileName[$i]);
}
}else {
// 如果是文件夹就匹配文件夹内的所有文件
$fileList = glob($fileName[$i] . '/*');
// 是否匹配到文件
if (count($fileList) < 1) {
// 如果没有匹配到文件说明这是一个空文件夹,直接删除
if (rmdir($fileName[$i])) {
// 如果删除成功就把文件夹名添加到已删除文件的数组
array_push($success, $fileName[$i]);
}
}else {
// 如果匹配到文件就调用自身继续删除
$result = delete($fileList);
foreach($result as $val) {
// 把返回结果添加到已删除文件的数组
array_push($success, $val);
}
}
}
// 判断需要删除的文件或文件夹是否还存在
if (file_exists($fileName[$i])) {
// 如果还存在就调用自身继续删除
$result = delete(array($fileName[$i]));
foreach($result as $val) {
// 把返回的结果添加到已删除文件的数组
array_push($success, $val);
}
}
}
}
// 执行完毕后返回已删除的文件或文件夹的名称
return $success;
}
使用
下面是一个包含文件和文件夹的目录:
D:.
│ delete.php
│ favicon.ico
│
├─app
│ getimg.json
│ imgInfo.json
│ server.php
│
├─css
│ │ app.287096e6.css
│ │ app.2d4a1a45.css
│ │ app.6582a0f0.css
│ │ app.eef9e5aa.css
│ │ chunk-vendors.4f7bf8cd.css
│ │
│ └─src
│ │ App.vue
│ │ main.js
│ │
│ ├─assets
│ │ logo.png
│ │
│ └─components
│ content.vue
│
└─js
app.27d4ea4a.js
app.27d4ea4a.js.map
app.77d9468e.js
app.77d9468e.js.map
app.7d454f08.js
app.7d454f08.js.map
app.931622e1.js
app.931622e1.js.map
chunk-vendors.ed4bd0e4.js
chunk-vendors.ed4bd0e4.js.map
下面把除了 delete.php
外的文件和文件夹全部删除:
PHP代码:
// 要删除的文件
$files = array(
'favicon.ico',
'app',
'css',
'js'
);
// 删除
$result = delete($files);
这里因为是简单演示,所以就手打文件名了,下面是返回结果:
Array
(
[0] => favicon.ico
[1] => app/getimg.json
[2] => app/imgInfo.json
[3] => app/server.php
[4] => app
[5] => css/app.287096e6.css
[6] => css/app.2d4a1a45.css
[7] => css/app.6582a0f0.css
[8] => css/app.eef9e5aa.css
[9] => css/chunk-vendors.4f7bf8cd.css
[10] => css/src/App.vue
[11] => css/src/assets/logo.png
[12] => css/src/assets
[13] => css/src/components/content.vue
[14] => css/src/components
[15] => css/src/main.js
[16] => css/src
[17] => css
[18] => js/app.27d4ea4a.js
[19] => js/app.27d4ea4a.js.map
[20] => js/app.77d9468e.js
[21] => js/app.77d9468e.js.map
[22] => js/app.7d454f08.js
[23] => js/app.7d454f08.js.map
[24] => js/app.931622e1.js
[25] => js/app.931622e1.js.map
[26] => js/chunk-vendors.ed4bd0e4.js
[27] => js/chunk-vendors.ed4bd0e4.js.map
[28] => js
)
上面输出的结果就是已删除的文件和文件夹。
以上就是 PHP 删除文件和文件夹的方法,因为代码比较简单而且很多都有注释,就不逐句说明了。
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/140/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。