PHP服务器文件管理器开发小结(五):获取文件属性信息

回顾第三节列出的基本代码框架,作者为枚举文件属性信息预留了不少的表头:

echo "<table>";
echo "<tr><th>Name</th><th>Type</th><th>Readable</th><th>Writable</th><th>Excutable</th><th>Size</th><th>Created</th><th>Modified</th><th>Access</th><th>Operation</th></tr>";

如下图:

从左至右分别为名称、类型、可读性、可写性、可执行性、大小、创建时间、修改时间、访问时间、操作。类型为文件夹、文件、连接等,可读、可写、可执行通过对号和错号图标标识True or False。大小提供一个约数,创建、修改、访问时间提供标准时间表示,操作栏则列出对该元素可执行的操作。

具体到文件,每一行的内容通过getFileElemInfo函数列出:

        if (isset($fileList))
        {
            $isDirEmpty = false;
            natsort($fileList);
            foreach($fileList as $fileName)
            {
                echo getFileElemInfo($strDirName, $fileName);
            }
        }

使用natsort,可以为文件名提供比较合理的排序模式。如果需要更复杂的排序,可以使用usort,这里不做展开。

通过stat()函数可以得到文件比较多的属性了,而文件类型可以通过filetype得到。

下面是前两项的描述方法:

function getDirElemInfo($dirPath, $elemName)
{
    $dirPath = rtrim($dirPath, "/");
    $filePath = $dirPath."/".$elemName;
    if (!($res = stat($filePath)))
        return "";
    $info = "<tr>";
    $elemType = filetype($filePath)
    $info.= "<td class=\"fileName\">".$elemName."</td>";
    $info.= "<td>".$elemType."</td>";

$info变量保存着整个行的信息,下面会继续用到。

通过下面三个函数可以得到后面三栏的值:

  1. 可读:is_readable
  2. 可写:is_writable
  3. 可执行:is_executable

然而,这样得到的结果只是BOOL值,需要转化为具体的图像链接。下面用?:三元算子简洁的实现了这一功能。

    $pathCorrect = "images/correct.png";
    $pathError = "images/error.png";
    $pathReadable = is_readable($filePath)?$pathCorrect:$pathError;
    $info.= "<td class=\"sig\"><img src=\"".$pathReadable."\" alt=\"\" class=\"tabmenu\"></td>";
    $pathWritable = is_writable($filePath)?$pathCorrect:$pathError;
    $info.= "<td class=\"sig\"><img src=\"".$pathWritable."\" alt=\"\" class=\"tabmenu\"></td>";
    $pathExcutable = is_executable($filePath)?$pathCorrect:$pathError;
    $info.= "<td class=\"sig\"><img src=\"".$pathExcutable."\" alt=\"\" class=\"tabmenu\"></td>";

注意其使用的样式类sig,对应的css为:

.sig{
	text-align: center;
}

可以使图标居中显示。

使用filesize或stat()["size"]可以获取基于BYTE的文件大小,但是那样太冗余,因此笔者编写了下面的sizeToBytes函数用于给出文件的相对大小:

function sizeToBytes($size)
{
    $listUnits = array("Bytes", "Kb", "Mb", "Gb", "Tb");
    $index = 0;
    $base = 1;
    while ($size >= $base * 1024)
    {
        $base *= 1024;
        $index ++;
    }
    return sprintf("%.2f%s", $size/$base, $listUnits[$index]);
}
$info.= "<td>".sizeToBytes($res["size"])."</td>";

文件的创建、修改、访问时间可以通过以下方式列出

    $info.= "<td>".date("Y-m-d H:m:s",$res["ctime"])."</td>";
    $info.= "<td>".date("Y-m-d H:m:s",$res["mtime"])."</td>";
    $info.= "<td>".date("Y-m-d H:m:s",$res["atime"])."</td>";

实际上,上面的诸多函数除了文件大小外其他都适用于文件夹的属性。

具体效果:

时间: 2024-12-04 22:50:00

PHP服务器文件管理器开发小结(五):获取文件属性信息的相关文章

PHP服务器文件管理器开发小结(总结):总结、索引和源代码

PHP服务器文件管理器的开发经过前一阶段的介绍基本完成了功能搭建,包括目录的检索.增加.删除.重命名,文件的增加.浏览.修改.重命名.移动,以及文件的上传和下载等功能.本文对前一阶段工作的相关博文进行索引,并提供源代码供有兴趣的同学一同讨论. PHP服务器文件管理器开发小结(一):功能规划 本节讨论了文件管理器的目标功能和运行环境. PHP服务器文件管理器开发小结(二):版面设计和css 本节讨论了页面布局所需的css内容,并介绍了引入jQuery和jQueryUI的方法. PHP服务器文件管理

PHP服务器文件管理器开发小结(一):功能规划

为了更好的学习PHP.AJAX和LAMP等,为搭建PHP服务器打下基础,作者尝试开发一款基于PHP的服务器文件管理器,并且在管理过程中使用AJAX而不刷新页面. 文件管理器包含以下基本操作 当前文件夹 回到首文件夹 回到上一级文件夹 刷新文件夹视图 上传文件 新建文件 新建子文件夹 文件操作 查看内容 编辑内容 下载 重命名 移动 删除 文件夹操作 重命名 删除 基本上实现了以上功能后,一个比较完善的服务器文件管理器就形成了. 注意,本示例仅考虑Apache可操作的权限,不考虑提权的情况. 管理

PHP服务器文件管理器开发小结(三):使用jQuery提交AJAX请求

本节将讨论使用jQuery提交AJAX请求的基本方法,并完成显示首文件夹的基本方法. 同时,本节也将讨论使用图片链接提交请求的基本方法. jQuery是一套强大的JS库,将复杂的JS操作封装成简洁的语句,并提供对AJAX的支持.通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本.HTML.XML 或 JSON - 同时您能够把这些外部数据直接载入网页的被选元素中.编写常规的 AJAX 代码并不容易,因为不同的浏览器对 AJAX 的实现

PHP服务器文件管理器开发小结(二):版面设计和css

首先是引用jQuery和jQueryUI的方法,为了减轻服务器的压力,作者引用了第三方的源: <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css"> <script type="text/javascript" src="http://code.jquery.com/jquery-1.

PHP服务器文件管理器开发小结(七):应用jQueryUI预览服务器图片

上一节讨论了利用jQueryUI实现用户友好的新建.查看和编辑文件的界面.然而,这些界面都是针对纯文本的,如果是图像的话,查看文件仅提供纯文本就很不友好了.因此,需要为前端提供图像浏览的方法. 先提供前端JavaScript的代码,首先是"原材料": <div id="dialogImage" style="display:none"> <img  src="" id="imgView"/

PHP服务器文件管理器开发小结(六):使用jQueryUI实现新建、查看和编辑文件

前面几节所做的操作都是对服务器内容的读取,下面开始探讨若干会牵扯到修改服务器的操作. 首先是在当前文件夹下新建文件,对应着文件夹上方的New File菜单项. <li><a href="#" title="new file" onClick="onNewFile()"><img src="images/newfile48.png" class="topmenu" />&l

PHP服务器文件管理器开发小结(八):更多的操作——重命名、移动、删除

这一节介绍几个简单的文件操作的PHP实现:使用rename进行文件和文件夹的重命名以及移动,及使用unlink删除文件和使用rmdir删除文件夹. rename函数的基本语法是 rename($oldname, $newname) 即将$oldname对应的文件或文件夹重命名为$newname对应的文件和文件夹.如果前后名称对应的是同一路径,则该函数仅尝试重命名,否则将尝试移动文件并重命名. 使文件和文件夹重命名的情况基本类似,因此采用同一的处理模式: if (is_writable($file

PHP服务器文件管理器开发小结(十):使用jQuery和iframe实现AJAX文件上传

上一节讨论了文件下载,这一节继续讨论文件上传. 众所周知,前端上传文件比较简单的办法就是使用文件控件<input type="file"/>.然而,如果我们需要上传过程是AJAX的,亦即上传过程不刷新页面,仅反馈需要的信息,那就需要更加精巧的设计了. 首先是上传文件图片链接: <li><a href="#" title="upload" onClick="onUploadFile()">&l

PHP服务器文件管理器开发小结(四):利用SESSION响应文件夹导航

书接上回,在首文件夹(HOME)图标的旁边是回到上级文件夹(UP)和刷新当前文件夹(REFRESH)两个图标,对应的图片链接为:         <li><a href="#" title="up" onClick="onUp()"><img src="images/upfolder48.png" class="topmenu" /></a></li&g