1.文件的属性信息获取

首先文件具有类型,在linux下边,有block(块设备,如磁盘分区、CD-ROM)、char(以字符为输入的设备,如键盘、打印机)、dir(目录类型,目录也是文件的一种)、fifo(命名管道,解释是将信息从一个进程传到另一个进程)、file(普通的文件)、link(链接,类似win下边的快捷方式)、unknow(未知类型)7大类,在win下边,只有3类:file、dir和unknown。Linux渣表示一定要好好搞一下Linux-_-,人家完全是为Linux而生。

关于类型的获取有这么几个函数:filetype:获取类型; is_file:判断为是否是正常文件; is_link:判断是否是链接。

关于属性的获取有这么几个函数:

file_exists:判断文件或目录是否存在;

filesize:获取文件大小;

is_readable、is_writable、is_executable :是否可读、可写、可执行;

filectime、filemtime、fileatime:获取文件的创建时间(create)、修改时间(modify)、访问时间(access),均返回时间戳;

stat:获取文件的一些基本信息,返回一个索引与关联混合数组。

比如,可以这样判断文件类型:

复制代码

<php

function getFileType($path){ // 获取文件类型

switch(filetype($path)){

case 'file': return 'ordinary file';

case 'dir': return 'directory';

case 'block': return 'block device file';

case 'char': return 'transfer device base on char';

case 'fifo': return 'named pipes';

case 'link': return 'symbol link';

default: return 'unknown type';

}

}

复制代码

filesize返回的是以字节为单位的数据,如果是大文件数字或很大,可以对数字先处理一下,代码如下

复制代码

<?php

// 处理文件大小

function getSize($path = '', $size = -1){

if($path !== null && $size == -1){ // 只传路径就计算大小,也可以使之只处理数字

$size = filesize($path);

}

if($size >= pow(2, 40)){

return round($size/pow(2, 40), 2).'TB';

}

else if($size >= pow(2, 30)){

return round($size/pow(2, 30), 2).'GB';

}

else if($size >= pow(2, 20)){

return round($size/pow(2, 20), 2).'MB';

}

else if($size >= pow(2, 10)){

return round($size/pow(2, 10), 2).'KB';

}

else{

return round($size, 2).'Byte';

}

}

复制代码

现在综合来获取一下文件信息,代码如下:

复制代码

<?php

function getFileInfo($path){

if(!file_exists($path)){ // 判断文件是否存在

echo 'file not exists!<br>';

return;

}

if(is_file($path)){ // 是文件,打印基础文件名

echo basename($path).' is a file<br>';

}

if(is_dir($path)){ // 是目录 ,返回目录

echo dirname($path).' is a directory<br>';

}

echo 'file type:'.getFileType($path).'<br>'; // 获取文件类型

echo 'file size:'.getSize($path).'<br>'; // 获取文件大小

if(is_readable($path)){ // 是否可读

echo basename($path).' is readable<br>';

}

if(is_writeable($path)){ // 是否可写

echo basename($path).' is writeable<br>';

}

if(is_executable($path)){ // 是否可执行

echo basename($path).' is executable<br>';

}

// touch函数可以修改这些时间

echo 'file create time: '.date('Y-m-d H:i:s', filectime($path)).'<br>'; // 创建时间

echo 'file modify time: '.date('Y-m-d H:i:s', filemtime($path)).'<br>'; // 修改时间

echo 'last access time: '.date('Y-m-d H:i:s', fileatime($path)).'<br>'; // 上次访问时间

echo 'file owner: '.fileowner($path).'<br>'; // 文件拥有者

echo 'file permission: '.substr(sprintf('%o', (fileperms($path))), -42881064151).'<br>'; // 文件权限,八进制输出

echo 'file group: '.filegroup($path).'<br>'; // 文件所在的组

}

filesize返回的是以字节为单位的数据也可以使之处理数字的更多相关文章

  1. ZeroMQ接口函数之 :zmq_msg_size - 以字节为单位返回消息内容的大小

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_msg_size zmq_msg_size(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq ...

  2. 鸿蒙内核源码分析(字符设备篇) | 字节为单位读写的设备 | 百篇博客分析OpenHarmony源码 | v67.01

    百篇博客系列篇.本篇为: v67.xx 鸿蒙内核源码分析(字符设备篇) | 字节为单位读写的设备 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  3. UTF-8以字节为单位对Unicode进行编码

    UTF-8以字节为单位对Unicode进行编码.从Unicode到UTF-8的编码方式如下: Unicode编码(16进制) UTF-8 字节流(二进制) 000000 - 00007F 0xxxxx ...

  4. 在AJAX里 使用【 XML 】 返回数据类型 实现简单的下拉菜单数据

    在AJAX里 使用XML返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  5. 在AJAX里 使用【 JSON 】 返回数据类型 实现简单的下拉菜单数据

    在AJAX里 使用JSON返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  6. 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction

    今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...

  7. 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化

    背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务.其中一个典型场景是 Kafka/ByteM ...

  8. ThinkPHP之中的getField、Find、select、返回数据类型详解(ThinkPHP之中所有数据读取了)

    小李子:用于演示作用的数据库表:customers 官方解读: “ 读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法 ” $customers=D('customers' ...

  9. Mysql数据数据[字节、长度、数据范围]一览表

    1.mysql有哪些数据类型: 主要包括以下五大类: 整数类型:BIT.BOOL.TINY INT.SMALL INT.MEDIUM INT. INT. BIG INT 浮点数类型:FLOAT.DOU ...

随机推荐

  1. ubuntu 13.10 amd64安装ia32-libs

    很多软件只有32位的,有的依赖32位库还挺严重的:从ubuntu 13.10已经废弃了ia32-libs,但可以使用多架构,安装软件或包apt-get install program:i386.有的还 ...

  2. 【mysql】用navicat连接虚拟机mysql出现错误代码(10038)

    来源: http://www.cnblogs.com/ohmydenzi/p/5521121.html http://blog.csdn.net/chana1101/article/details/3 ...

  3. Road Construction(poj 3352)

    题意:求最少天几条边,使这个无向图变成双连通图. /* tarjan缩点后,形成一棵树,求出叶子节点数tot,答案是(tot+1)/2 */ #include<cstdio> #inclu ...

  4. Fresco 源码分析(二) Fresco客户端与服务端交互(2) Fresco.initializeDrawee()分析 续

    4.2.1.2 Fresco.initializeDrawee()的过程 续 继续上篇博客的分析Fresco.initializeDrawee() sDraweeControllerBuilderSu ...

  5. Xamarin.Android开发实践(十八)

    Xamarin.Android之SlidingMenu 一.前言 有位网友在评论中希望能够出个在Xamarin.Android下实现SlidingMenu效果的随笔,刚好昨天在观看官网示例项目的时候也 ...

  6. Java Hour 56 Spring 和 Hibernate 的集成

    上一章节我们完成了一个简单的Spring 的试验品,这章要让Spring 上战场了,不要慌,步骤都是一样的. Spring 对 Hibernate 的支持是很多方面的,第一个战场是SessionFac ...

  7. CF 149D Coloring Brackets 区间dp ****

    给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...

  8. Python实践:开篇

    一.概述 Python实践 是应用Python解决实际问题的案例集合,这些案例中的Python应用通常 功能各异.大小不一. 该系列文章是本人应用Python的实践总结,会不定期更新. 二.目录 Py ...

  9. spring实战五之Bean的自动检测

    在spring实战四中,使用在Spring中增加<context:annotation-config>的方式告诉Spring,我们打算使用基于注解的自动装配,希望Spring特殊对待我们所 ...

  10. python开发_mysqldb安装

    在python的API上面,看到了MySQLdb,即python可以操作mysql数据库 接下来,我就把我这两天的工作给大伙絮叨絮叨: 准备条件: 1.MySQL-python-1.2.4b4.win ...