递归复制文件
/**
- 问题: copy()函数只能复制文件 不能复制文件夹
- 那文件夹如何处理: 只能通过mkdir来创建
*/
//如果$src是目录 is_dir
//则创建对应的
d
s
t
目
录
,
m
k
d
i
r
/
/
遍
历
dst 目录, mkdir //遍历
dst目录,mkdir//遍历src目录
//假设$src是 www $dst是 www_copy
//遍历出来的name是06_File,那么这个文件的路径是
//www/06_File 和 www_copy/06_File
//所以要拼接处两个路径, 分别是原路径 和 目标路径
//把这个新的内容粘贴过去, 此时又要区分是文件还是文件夹… 此时就要进行 递归操作了!
//参数1: $src 是原文件夹路径
//参数2: $dst 是目标文件夹路径
function copyDir($src, $dst)
{
if (is_dir($src)) {
//文件夹不能复制, 只能创建
mkdir($dst);
//遍历文件夹下的所有内容, 都复制过去
$handle = opendir($src);
while (($name = readdir($handle)) !== false) {
if ($name != '.' && $name != '..') {
//获取遍历出来的子文件的实际路径
$newSrc = $src . '/' . $name;
$newDst = $dst . '/' . $name;
//新拼接出来的路径 可能是文件 也可能是文件夹
//此过程恰好就是当前函数在做的事情
copyDir($newSrc, $newDst);
}
}
closedir($handle);
}
//如果$src是文件 is_file //就用copy方法 复制过去即可
if (is_file($src)) {
copy($src, $dst);
}
}
copyDir('D:/www', 'D:/www_copy');
//就会在D盘下出现 www_copy文件夹, 其中内容与www文件夹一样
**
// 递归删除: 慎用,不进垃圾回收站
//rmdir(); 只能删除空的目录
rmdir(‘D:/www_copy’);
function removeDir($path)
{
//路径是文件夹
//要先遍历删除文件夹下的所有内容, 然后再删除文件夹
if (is_dir($path)) {
$handle = opendir($path);
while (($name = readdir($handle)) !== false) {
if ($name != '.' && $name != '..') {
$p = $path . '/' . $name;
//拼接的新路径$p 有可能是文件 也可能是文件夹, 这个删除处理操作恰好就是当前函数在做的事情
removeDir($p);
}
}
closedir($handle);
rmdir($path);
}
//路径是文件 unlink()
if (is_file($path)) {
unlink($path);
}
}
removeDir('D:/www_copy/');
利用递归的方式读取某个目录下方的所有子目录信息
//readDir(); 只能读取当前目录的一级内容
function readAllDir($path)
{
//如果$path是 目录的话那么就查看目录下方的所有内容 is_dir()
//循环遍历时, 通过拼接循环得到的文件名到 路径上
//$path . '/' . $name
//得到循环出来的文件的实际路径, 然后再次判断这个路径是文件还是文件夹, 是文件就打印出这个路径, 是文件夹, 就再次遍历文件夹.....
if (is_dir($path)) {
$handle = opendir($path);
while (($name = readdir($handle)) !== false) {
if ($name != '.' && $name != '..') {
//$name是文件夹/文件的名字
$p = $path . '/' . $name;
//再次判断$p这个新路径是文件还是文件夹
readAllDir($p);
}
}
closedir($handle);
}
//如果$path是 文件的话,那么就打印出来 is_file()
if (is_file($path)) {
echo $path, '<br>';
}
}
header('content-type:text/html;charset=gbk');
//期望: 打印出所有的子文件路径
readAllDir('D:/www');
文件大小的读取
//单位是 字节
// echo filesize(‘C:/Sublime_0703.rar’);
/**
-
计算机大小单位:
-
bit 位 代表1个开关, 0 或 1
-
Byte 字节 1Byte = 8bit 可以代表256个数字
-
kB 千字节 1kB = 1024Byte 1024 = 2^10
-
MB 兆 1MB = 1024KB
-
GB 1GB = 1024MB
-
TB 1TB = 1024G
-
PB 1PB = 1024TB
function toSize($path) { $bytes = filesize($path); //读取大小, 单位是byte $n = 0; while ($bytes >= 1024) { $bytes /= 1024; //$n 记录进位的次数, 每次除以1024就代表进一位 $n++; } $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; return round($bytes, 2) . $units[$n]; }