查看磁盘分区信息

课后整理 2021-1-7

通过文件系统函数不但可以对目录、文件进行操作,获取目录、文件的相关信息,而且可以获取磁盘分区的大小。运行本实例,将根据文本框提交的目录,获取该目录所在磁盘分区的大小,以及该目录下的所有文件,运行结果如图11.20所示。

图11.20 查看磁盘分区信息

【操作步骤】

第1步,创建index.php,添加表单,设置文本框、提交按钮,使用POST方法将数据提交到本页。

<form  action="index.php" method="post"  enctype="multipart/form-data" name="form1">
    <p>文件名称:<input name="file_name" type="text"      id="file_name"  size="35"></p>
    <p>请输入正确的目录,例如:E:\www</p>
    <p><input type="submit"  name="Submit"   value="提交"></p>
</form>

第2步,通过$_POST方法获取表单提交的目录路径。首先,判断获取的目录是否合理。然后,通过iconv()函数对获取的字符串进行编码转换。接着,对获取的字符串进行截取,获取该目录所在的磁盘分区,并应用disk_total_space()函数获取磁盘分区的大小。最后,应用opendir()函数和readdir()函数读取提交目录下的内容。

<?php
if (isset($_POST ['file_name'])  && $_POST ['file_name'] != "" && is_file ( $_POST  ['file_name'] ) == false) {
    $file_name = iconv ( "utf-8",  "gb2312", $_POST ['file_name'] );        //编码格式转换
    if (file_exists ( $file_name )) {                    //判断目录是否存在
        $len = strripos ( $file_name,  ":" );           //截取字符串
        $dir = substr ( $file_name, 0, $len + 1  );    //获取提交目录所在磁盘
        $filesize_z=disk_total_space ( $dir );         //获取目录总大小
        $filesize_z=number_format($filesize_z/(1024*1024*1024),2,".","");    //数字的格式化
        $filesize_s=disk_free_space ( $dir );          //获取磁盘剩余空间
        $filesize_s=number_format($filesize_s/(1024*1024*1024),2,".","");    //字节的格式化
        echo "<p>本地磁盘(" . $dir . ") 总大小:" . $filesize_z .    "  GB &nbsp; 可用空间:".$filesize_s."  GB </p><hr>";
        echo $_POST ['file_name'] . " 目录下的内容:" .  "<br>";
        $i  = 0;
        $list = opendir ( $file_name ); //打开目录
        while ( $read_list = readdir ( $list )  ) { //读取目录
            $i ++;
            echo " $i: " . iconv (  "gb2312", "utf-8", $read_list ) . " <br> ";  //输出目录中的内容     
        }
        closedir ( $list ); //关闭目录
    } else {
        echo "<script>alert('目录不存在!');</script>";
    }
} elseif(isset($_POST  ['file_name'])) {
    echo "<script>alert('请输入正确的目录路径!');</script>";
}
?>

获取磁盘分区大小应用的是disk_total_space()函数,获取磁盘分区剩余空间应用的是disk_free_space()函数。disk_total_space()函数语法如下:

float disk_total_space ( string  $directory )

该函数根据给定的一个包含有一个目录的字符串,返回相应的文件系统或磁盘分区返回所有的字节数。注意,本函数返回的是该目录所在的磁盘分区的总大小,因此在给出同一个磁盘分区的不同目录作为参数所得到的结果完全相同。

disk_free_space()函数获取一个目录的可用空间,语法如下所示:

float disk_free_space ( string  $directory )

参数directory用来指定文件系统或磁盘分区。

通过strripos()函数可以获取到指定字符串A在另一字符串B中最后出现的位置,其返回值为int型,根据这个返回值就可以对字符串B以字符串A为分隔点进行截取,在执行截取的操作时需要应用到substr()函数。