一、解析目录路径
1.PHP程序、配置文件、Apache配置文件中涉及路径均使用/,也可以使用目录分隔符常量DIRECTORY_SEPARATOR进行连接(麻烦)
2.多路径分隔符Windows;Linux:,也可以使用路径分隔符常量PATH_SEPARATOR进行连接
3.程序换行符常量PHP_EOL
4.相对路径:./当前目录../上级目录
5.不同的根路径
echo '<img src="/a.jpg"/>';//服务器根目录
mkdir('/hello');//操作系统盘根目录
6.路径解析函数
a.basename()取文件名
b.dirname()取目录名
c.pathinfo()将路径信息返回成数组
d.realpath()返回规范化的绝对路径名
二、遍历目录
1.glob:匹配目录中指定文件放入返回数组中
2.Directory函数:
•chdir — 改变目录
•chroot — 改变根目录
•closedir — 关闭目录句柄
•dir — 返回一个 Directory 类实例
•getcwd — 取得当前工作目录
•opendir — 打开目录句柄
•readdir — 从目录句柄中读取条目
•rewinddir — 倒回目录句柄
•scandir — 列出指定路径中的文件和目录
**注:遍历目录时,前两个文件名.和..要过滤掉**
$open=opendir('test');
/*echo readdir($open);*/
while($filename=readdir($open)){
//过滤掉.和..
if($filename!=='.'&&$filename!=='..'){
//注意:此处$filename仅代表目录名或文件名,要访问还要加上路径
$filename='./test/'.$filename;
if(is_dir($filename)){
echo '目录:'.$filename.'<br>';
}else{
echo '文件:'.$filename.'<br>';
}
}
}
//使用倒回句柄,倒回至目录开始,才能再次遍历
rewinddir($open);
echo'------------------------------------------<br>';
while($filename=readdir($open)){
//过滤掉.和..
if($filename!=='.'&&$filename!=='..'){
//注意:此处$filename仅代表目录名或文件名,要访问还要加上路径
$filename='./test/'.$filename;
if(is_dir($filename)){
echo '目录:'.$filename.'<br>';
}else{
echo '文件:'.$filename.'<br>';
}
}
}
closedir($open);
三、统计目录中个数和大小
1.使用递归统计目录下所有文件的个数,如下:
$dirNum=0;
$fileNum=0;
function getdirnum($filename){
if(is_dir($filename)){
$dir=opendir($filename);
global $dirNum;
global $fileNum;
while($filename=readdir($dir)){
if($filename!=='.'&&$filename!=='..'){
$filename=$file.'/'.$filename;
if(is_dir($filename)){
$dirNum++;
getdirnum($filename);//递归
}else{
$fileNum++;
}
}
}
echo '目录个数为'.$dirNum.'<br>';
echo '文件个数为'.$fileNum.'<br>';
closedir($dir);
}else{
echo "这个文件名不是目录<br>";
}
}
getdirnum('test');
2.使用递归统计目录大小,即目录下所有文件大小的和
$size=0;
function dirsize($file){
global $size;
if(is_dir($file)){
$dir=opendir($file);
while($filename=readdir($dir)){
if($filename!=='.'&&$filename!=='..'){
$filename=$file.'/'.$filename;
if(is_dir($filename)){
$size+=dirsize($filename);
}else{
$size+=filesize($filename);
}
}
}
closedir($dir);
}else{
$size=filesize($filename);
}
return $size/pow(2,10).'MB';
}
echo dirsize('test');
3.统计磁盘/磁盘可用空间大小
$total=disk_total_space('c:');
$valuable=disk_free_space('c:');
echo $total/pow(2,30).'<GB>';
echo $valuable/pow(2,30).'<GB>';
三、建立和删除目录
1.mkdir('test',0644):创建目录
bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )
注:$mode为权限,用户、组、其他用户各自有r=4/w=2/x=1的权限,如0644为rw_/r__/r__(Linux权限的知识)
2.rmdir('test'):删除目录,注意目录要为空
3.unlink('test.php'):删除文件
4.利用递归删除非空目录,如下:
**注:切记排除目录下的.和..,否则会删除整个磁盘内容,且不进回收站!**
function deleteDir($dirname){
$dir=opendir($dirname);
while($filename=readdir($dir)){
if($filename!=='.'&&$filename!=='..'){
$filename=$dirname.'/'.$filename;
if(is_dir($filename)){
deleteDir($filename);
}else{
unlink($filename);
}
}
}
closedir($dir);
rmdir($dirname);
}
deleteDir('test');
5.复制和移动目录
1.rename():重命名一个文件或目录,加上路径后即为移动文件,因此移动和重命名是一个函数
bool rename ( string $oldname , string $newname [, resource $context ] )
2.copy():只能拷贝文件,无法拷贝目录
bool copy ( string $source , string $dest [, resource $context ] )
3.拷贝非空目录函数:
function copyDir($dirname,$dircopy){
mkdir($dircopy);
$dir=opendir($dirname);
while($filename=readdir($dir)){
if($filename!=='.'&&$filename!=='..'){
$srcfile=$dirname.'/'.$filename;//原目录名或文件名
$tofile=$dircopy.'/'.$filename;//新目录名或文件名
if(is_dir($srcfile)){
copyDir($srcfile,$tofile);
}else{
copy($srcfile,$tofile);
}
}
}
closedir($dir);
}
copyDir('test','test222');
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。