php提供对服务器中的目录进行操作的函数,操作包括创建、读取、复制、删除。
php函数对于目录的解析支持绝对路径和相对路径。这写函数有basename()、dirname()、pathinfo()、opendir()、readdir()、closedir()、rewinddir()等。具体见下面代码:
<?php /** * @author youthflies * 文件目录操作 */ header("Content-Type:text/html;charset=utf-8"); $filePath = "/home/youthflies/downloads/jdk-6u37-linux-i586.bin"; if(file_exists($filePath)) echo "绝对路径正确!" ."<br />"; if(file_exists("../../../../downloads/jdk-6u37-linux-i586.bin")) echo "相对路径正确!" . "<br />"; //basename()函数返回路径中的文件名,第二个参数为可选,如果手动输入了拓展名,该函数就返回文件名(不带拓展名) echo basename($filePath) . "<br />"; echo basename($filePath, ".bin") . "<br />"; //dirname()与basename()相反,它返回给定文件的路径部分 echo dirname($filePath) . "<br />"; //pathinfo()函数返回一个关联数组,包括路径名、文件名、基本名和拓展名,键名分别是dirname、basename、filename和extension print_r(pathinfo($filePath)); echo "<br />"; /** * 如果要遍历某个路径,可以用opendir()、readdir()、closedir()和rewinddir()函数 * opendir()函数,接受一个目录作为参数,返回一个目录句柄,如果失败则返回false * readdir()函数,接受opendir()函数返回的句柄作为参数,函数返回该目录句柄的一个文件,且指针向后移动,通常通过循环来遍历目录的全部内容 * closedir()接受opendir()函数返回的句柄作为参数,来关闭打开的目录 * rewinddir()接受opendir()函数返回的句柄作为参数,将目录指针重置到开始处,即目录的开头 */ $dirName = "/home/youthflies/downloads"; $dirHandle = opendir($dirName); echo '<table border="0" align="center" width="600" cellspacing="0" cellpadding="0">'; echo '<tr align ="left" bgcolor="blue">'; echo '<th>文件名</th><th>文件大小</th><th>文件类型</th><th>修改时间</th></tr>'; $num = 0; while($fileName = readdir($dirHandle)) { $file = $dirName . '/' . $fileName; $bgcolor = $num++%2==0 ? "blue" : ""; echo '<tr bgcolor=' . $bgcolor . '>'; echo '<td>' . $file . '</td>'; echo '<td>' . filetype($file) . '</td>'; echo '<td>' . filesize($file) . '</td>'; echo '<td>' . date("Y-m-d h:i:s", filemtime($file)) . '</td>'; echo '</tr><tr>'; } echo '</table>'; closedir($dirHandle); /** * 下面是个计算目录大小的例子(使用的递归) */ function dirSize($dirName) { $dir_Size = 0; if(is_file($dirName)) return filesize($dirName); $dirHandle = opendir($dirName); if($dirHandle == false) return; while($fileName = readdir($dirHandle)) { if($fileName!='.' && $fileName!='..') { $file = $dirName . '/' . $fileName; if(is_file($file)) $dir_Size += filesize($file); elseif (is_dir($file)) $dir_Size += dirSize($file); } } closedir($dirHandle); return $dir_Size; } //调用dirSize()函数计算downloads目录的大小 echo dirSize("/home/youthflies/downloads")/(1024*1024) . "MB" . "<br />"; //disk_total_space()和disk_free_space()函数分别用来计算当前磁盘的总大小和剩余大小 echo disk_total_space("/home")/(1024*1024) . "MB" . "<br />"; echo disk_free_space("/home")/(1024*1024) . "MB" . "<br />"; //mkdir()函数用于创建目录;rmdir()函数用于删除空的目录,如果要删除非空目录,就要先递归删除该目录的其他文件;删除文件使用unlink()函数 $dirName2 = "/home/youthflies/downloads/mktem"; if(file_exists($dirName2)) { echo "目录已经存在" . "<br />"; if(rmdir("/home/youthflies/downloads/mktem")) echo "删除/home/youthflies/downloads/mktem 成功" . "<br />"; } else { if(mkdir($dirName2)) { echo "创建 /home/youthflies/downloads/mktem 成功"; //删除mktem目录下的tem.txt文件 exec("touch tem.txt"); //最好不要直接调用操作系统的shell命令 if(file_exists("mktem/tem.txt")) unlink("tem.txt", "mktem"); } } //如果想要复制文件,可以使用copy()函数,该函数只能复制普通文件,如果想复制整个文件夹,要使用递归。 copy("/home/youthflies/downloads/source.txt", "/home/youthflies/downloads/destination.txt"); ?>
上面代码输入结果:
绝对路径正确!
相对路径正确!
jdk-6u37-linux-i586.bin
jdk-6u37-linux-i586
/home/youthflies/downloads
Array( [dirname] => /home/youthflies/downloads [basename] => jdk-6u37-linux-i586.bin [extension] => bin [filename] => jdk-6u37-linux-i586)