文件系统管理

简述系统

问: 常用的系统版本有哪些?
windows闭源系列
Windows 1.0 --- Windows 95/98/Me/2000/2003 --- Windows XP --- Windows Vista --- Windows 7
Windows 8/8.1--- Windows 10(微软不再推出新的系统)

Liunx开源系列
Liunx基于unix系统发展而来.衍生版本有:
Linux, Mac OS X, Android, iOS, Chrome OS甚于路由器上的固件

文件系统概念

简述: 在任何计算机设备中,各种数据,信息等都以文件的形式存储,简单理解就是我们在windows上看到
的各种文件,图像(jpg,png...)的,可执行的(exe)的,视频(avi,mp4,rmvb)的等等,都是以文件形式存储在系
统上,这一套存储文件的系统成为文件系统。

每个系统都有自己的文件管理系统,比如我们熟悉的windows系统。
PHP内置了很多可操作这些文件的函数,通过学习这些函数,我们可以对系统上存储的这些文件进行管
理.

 文件类型

扩展:程序运行的基本逻辑。
在程序运行时,程序本身和数据一般都存在内存中,当程序运行结束后,存放在内存中的数据被释
放。
如果需要长期保存程序运兴所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部
存储介质上。

文件一般指存储在外部介质上具有名字(文件名)的一组相关数据集合。用文件可长期保存数据,并
实现数据共享。
在Windows系统中,我们能获得”file”、”dir”或者“unknown”三种文件类型。而在UNIX系统中,我们
可以获得block、char、dir、fifo、file、link和unknown七种类型。

filetype() 获取文件具体类型

语法:string filetype ( string filename ) 参数:文件的路径。注意:是路径。

实例:

1 var_dump(filetype('./123.txt')); //txt文件
2 var_dump(filetype('./123')); //目录
3 var_dump(filetype('./123.php')); //php文件也会显示file文件类型
4 var_dump(filetype('./123.uiur')); //乱写的uiur文件同样会显示file文件

文件类型判断

  is_dir( ) -- 判断给定文件名是否是一个目录 

  语法结构:bool is_dir(名称)
  返回类型:文件名存在并且是一个目录则返回 true,否则返回 false

  is_executable( ) -- 判断给定文件是否可执行

  语法结构:bool is_executable(名称)
  返回类型:如果文件存在且可执行则返回 true ,否则返回 false 。

  is_file( ) -- 判断给定文件名是否为一个正常的文件  

  语法结构:bool is_file(名称)
  返回类型:如果文件存在且为正常的文件则返回 true 。

  is_readable( ) -- 判断给定文件名是否可读

  语法结构:bool is_readable(文件名称)
  返回类型:如果文件存在并且可读则返回 true 。

  is_writable( ) -- 判断给定的文件名是否可写

  语法结构:bool is_writable(文件名称)
  返回类型:如果文件存在并且可写则返回 true 。

1 //判断给定文件名是否是一个目录
2 var_dump(is_dir('./123'));
3 //判断给定文件名是否可读
4 var_dump(is_readable('./123.txt'));
5 //判断给定的文件名是否可写
6 var_dump(is_writable('./123.txt'));
7 //判断给定的文件是否可执行
8 var_dump(is_executable('./123.exe'));

 文件属性

实例1:

1 //检查文件是否存在 true
2 var_dump(file_exists('./123.txt'));
3 //检查目录是否存在 true
4 var_dump(file_exists('./123'));
5 //14587字节,不可目录统计大小
6 var_dump(filesize('./123.txt'));

实例2:

 1 //设置时区
 2 date_default_timezone_set('PRC');
 3 //获取文件的创建时间
 4 var_dump(date('Y-m-d H:i:s',filectime('./123.txt')));
 5 //获取文件的修改时间
 6 var_dump(date('Y-m-d H:i:s',filemtime('./123.txt')));
 7 //获取文件的访问时间,liunx系统使用,windows无效果
 8 var_dump(date('Y-m-d H:i:s',fileatime('./123.txt')));
 9 //获取文件大部分属性
10 var_dump(stat('./123.txt'));//返回带有特定属性的数组

关于stat()函数特定的属性标识参考书册或者如下图:

目录的基本操作

常见的文件目录路径格式:

1 //在Windows系统的绝对路径,默认使用"\"分隔
2 $winPath="C:\Appserv\www\index.php"; 
3 
4 //在Windows系统中也可使用“/”分隔。
5 $winPath2="C:/Appserv/www/index.php";
6 
7 //在UNIX,Liunx系统中的绝对路径,必须使用"/"分隔
8 $unixPath="/var/www/html/index.php";

1)推荐使用 $winPath2 $winPath2 这种。
虽然代码是window下开发的,但运用多数都要在liunx 上运行,避免出现兼容性问题导致不解析。
2)注意使用绝对路径与相对路径。

使用PHP脚本可以方便对目录进行操作,如创建目录、遍历目录、复制目录与删除目录等操作 

basename -- 返回路径中的文件名部分

语法:string basename ( string path [, string suffix] )
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以后
缀名(suffix)结束的,那这一部分也会被去掉。

dirname -- 返回路径中的目录部分

语法:string dirname ( string path )

给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。
案例:

1 $path = "./home/httpd/html/index.php";
2 $file1 = basename($path); // 返回文件名加后缀部分"index.php"
3 $file2 = basename($path, ".php"); // 如果是以php结束的,会被去掉"index"
4 $file3 = dirname($path); // 返回路径部分,注意,最后没有杠"./home/httpd/html"
5 echo $file1.'<br>';
6 echo $file2.'<br>';
7 echo $file3.'<br>';

pathinfo -- 返回文件路径的信息

语法:array pathinfo ( string path [, int options] )
pathinfo() 返回一个联合数组包含有 path 的信息。包括以下的数组单元:dirname,
basename 和 extension。

可选参数2:
PATHINFO_DIRNAME - 只返回路径
PATHINFO_BASENAME - 只返回带后缀的文件名
PATHINFO_EXTENSION - 只返回后缀名

案例:

$path_parts = pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"]."<br />"; // /www/htdocs
echo $path_parts["basename"]."<br />"; // index.html
echo $path_parts["extension"]."<br >;
//只返回路径
$path_parts = pathinfo("/www/htdocs/index.html",PATHINFO_DIRNAME)
echo $path_parts;


//返回带后缀的⽂件名
$path_parts = pathinfo("/www/htdocs/index.html",PATHINFO_BASENAME)
echo $path_parts;

//只返回后缀名
$path_parts = pathinfo("/www/htdocs/index.html",PATHINFO_EXTENSION)
echo $path_parts;

遍历目录 **

opendir -- 打开目录
语法:resource opendir ( string path [, resource context] )
打开一个目录,成功返回一个资源,失败返回false。可用于之后的 closedir(),readdir() 和
rewinddir() 调用中。

readdir -- 从母录中读取条目
语法:string readdir ( resource dir_handle )
返回当前目录指针位置的文件名,没有返回false,并将指针向下移动一位。文件名以在文件系统
中的排序返回。

closedir -- 关闭目录
语法:void closedir ( resource dir_handle )
关闭目录。但必须之前被 opendir() 所打开。

什么叫资源?
我手里有一些资源,此处的资源是什么?站在“资源”的⻆度讲,它的作用是什么?连接两者的通道

案例:
遍历目录

 1   //打开目录
 2   $handle = opendir('./xxx');
 3   //var_dump($headld);
 4  
 5  //从目录中读取条目
 6  var_dump(readdir($headle)); //.
 7  var_dump(readdir($headle)); //..
 8  var_dump(readdir($headle)); //文件名
 9  //发现写一遍出来一个,写一遍出来一个,没有了返回什么?false
10  
11 
12 /*
13  while(readdir($handle)){
14    echo readdir($handle).'<br />';
15  }//以上代码为何不行?执行一次就会调往下一个开头.第一个执行一次并没有输出.所以成了隔行输处
16 
17 */
18 while( $filename=readdir($handle)){
19   echo $filename.'<br />';
20 }//关闭目录
21 closedir($handle);

统计磁盘大小

disk_free_space -- 返回磁盘中的可用空间,单位是字节

语法:float disk_free_space ( string directory )

给出一个包含有一个目录的字符串,本函数将根据相应的⽂件系统或磁盘分区返回可用的字节

数。

disk_total_space -- 返回一个目录的磁盘总大小,单位是字节

语法:float disk_total_space ( string directory )

给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回所有的字节

数。

实例:

1 //统计系统C盘可用空间
2 echo disk_free_space('C:');
3 //统计系统C盘总大小
4 echo disk_total_space('C:');

建立和删除目录 

mkdir -- 新建目录

语法:bool mkdir (string pathname [,int mode=777[, bool $recursive =

false [, resource $context ]]] )

尝试新建一个由 pathname 指定的的录。

参数说明:1.路径 2.权限 3.true递归创建

rmdir -- 删除目录

语法:bool rmdir ( string $dirname )

尝试删除 dirname 所指定的目录。 该目录必须是空的,而且必须有目录。

如果成功则返回 TRUE,失败则返回 FALSE。

touch -- 设定文件的访问和修改时间

语法:bool touch ( string $filename [, int $time = time() [, int $atime ]] )

尝试将由 filename 给出的文件的访问和修改时间设定为给出的 time 。

注意访问时间总是会被修改的不论有几个

如果文件不存在,则会被创建。

参数说明:1.给定文件名 2.设定创建时间 3.给定访问时间,不给按照2参数定设定

unlink -- 删除文件

语法:bool unlink ( string filename )

删除 filename。和 Unix C 的 unlink() 函数相似。如果成功则返回 TRUE,失败则返回 FALSE。

//递归创建必须填写为true
mkdir('./laowangba');
mkdir('./laowang/laoliu/canglaoshi/xiaoze',0777,true);

//删除目录,注意删除目录必须为空的,如果有内容必须挨个删
rmdir('./laowang');
rmdir('./laowang/laoliu/canglaoshi/xiaoze');

//touch 原本并不是创建目录用的,但我们一般在PHP中使用此函数创建文件
touch('./houzi.avi');
unlink('./houzi.avi');

文件的基本操作

 文件的打开与关闭

fopen -- 打开文件或者 URL

语法:resource fopen ( string filename, string mode[, bool use_include_path [, resource zcontext]] )

filename参数需要提供要被打开文件的URL。这个URL可以是脚本所在的服务器中的绝对路径,

也可以是相对路径,还可以是网络资源的文件。

mode 参数指定了所要求到该流的访问类型,(强烈建议附加b模式)。

fclose -- 关闭一个已打开的文件

语法:bool fclose ( resource $handle )

将 handle 指向的文件关闭。 成功时返回 TRUE, 或者在失败时返回 FALSE.

关于fopen第一个参数模式说明

 写入文件

fwrite -- 写入文件
语法:int fwrite ( resource handle, string string [, int length] )

fwrite() 把 string 的内容写入文件指针 handle 处。 如果指定了 length,当写入了 length 个字
节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
返回写入的字符数,出现错误时则返回 FALSE 。

1 //打开file.txt文件,选择只读模式,并返回资源
2 $handle = fopen("./file.txt", "r");
3 //写入字符串,为什么写不了?模式不对啊
4 fwrite($handle,"应该向往美好的事物,你会发现周围都是美好!");

file_put_contents() -- 将一个字符串写入文件
语法:int file_put_contents ( string You can't use 'macro parameter character #' in math mode data,[Flag]

和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
参数说明:1.要写入的文件名称 2.要写入的内容 3.一般写FILE_APPEND,与a+效果一样

1 file_put_contents('./file.txt','南方没有雪,有的时候会后悔',FILE_APPEND);

读取文件内容

fread -- 读取文件
语法:string fread ( resource handle  intlength )
fread() 从文件指针 handle读取最多 length个字节。

1 //打开file.txt文件,选择只读模式,并返回资源
2 $handle = fopen("./file.txt", "r");
3 //读取文本中的信息
4 $str = fread($handle,filesize('./file.txt'));

file_get_contents() -- 将文件内容读出,并读入到字符串中返回
语法:int file_get_contents ( string $filename )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。如果失
败,file_get_contents() 将返回 FALSE。
参数说明:要读取的文件名称

1 //此函数不光可以开个文本,图片都可以。
2 //注意:浏览器只认为是文本,需要告诉浏览器打开的是什么,header之前不可以用任何输出。
3 header('content-type:image/jpeg');
4 echo file_get_contents('./69.jpg');
5 
6 //此函数还可以输出网址
7 echo file_get_contents('http://www.google.com.hk');
8 var_dump(file_get_contents('http://www.google.com.hk'));

移动文件指针

ftell -- 返回文件指针读/写的位置
语法:int ftell ( resource handle )
返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。 如果出错,返回 FALSE。文
件指针必须是有效的,且必须指向一个通过 fopen()成功打开的文件。

rewind -- 倒回文件指针的位置
语法:bool rewind ( resource handle )
将 handle 的文件位置指针设为文件流的开头。 如果成功则返回 TRUE,失败则返回 FALSE。 文
件指针必须合法,并且指向由 fopen() 成功打开的文件。

1 $handle = fopen('./file.txt','w+');
2 fwirte($handle,"今天热成狗了。");
3 //echo ftell($handle);
4 rewind($handle);
5 $str = fread($handle,filesize('./file.txt'));
6 echo $str;

 

猜你喜欢

转载自www.cnblogs.com/zhony/p/10175978.html