PHP文件处理系统

概述

PHP是以UNIX文件系统为模型的,因此在windows系统中,我们只能获得”file”、”dir”、“unknown”三种文件类型。

在这里,我们着重讲解file和dir类型。

1.文件类型

常用的有下面函数:
filetype()获取文件类型
is_file() 判断是否是普通文件类型
is_dir() 判断是否是目录类型
is_link() 判断是否是链接类型

2.文件属性

filesize() 获取文件大小(单位是byte)
fileatime() 获取文件访问时间
filectime() 获取文件创建时间
filemtime()获取文件修改时间
is_readable() 判断文件是否可读
is_writable()判断文件是否可写
is_executable() 判断文件是否可执行

stat()可以获取文件的大部分属性(以数组方式返回)

如下代码:

<?php $filename="index.php"; echo filetype($filename);//file echo is_readable($filename);//1 echo is_writable($filename);//1 var_dump(is_executable($filename));//false echo date("Y-m-d H:i:s",filectime($filename)); echo date("Y-m-d H:i:s",fileatime($filename)); echo date("Y-m-d H:i:s",filemtime($filename)); echo "<hr/>"; echo round((filesize($filename)/1024),2)."kb";//0.35kb 

目录操作

1.解析目录路径

basename() 获取文件

<?php 
$dir="G:/wamp/www/index.php";
//获取目录中文件
echo basename($dir);//index.php
echo basename($dir,".php");//index(过滤掉.php)

dirname()获取目录

<?php 
$dir="G:/wamp/www/index.php";
echo dirname($dir);//G:/wamp/www

pathinfo()获取上面全部

<?php 
$dir="G:/wamp/www/index.php";
print_r(pathinfo($dir));
//Array ( [dirname] => G:/wamp/www [basename] => index.php [extension] => php [filename] => index )

2.遍历目录

opendir()

打开一个目录,返回资源类型的目录句柄

readdir()

返回当前目录指针位置的文件名,并且指针移动到下一位

closedir()

关闭指定目录

rewinddir()

将目录指针重置到目录开始处

如下代码:遍历一个目录

<?php 
header("content-type:text/html;charset=utf-8");
$dir="G:/wamp";
$handle=opendir($dir);

function listDir($handle,$dir,$number=0) {

    while($file=readdir($handle))
    {
        $dirFile=$dir.DIRECTORY_SEPARATOR.$file;
        if($file=="." || $file=="..")
            continue;

        echo  str_repeat("&nbsp;&nbsp;",$number).$file."&nbsp;&nbsp;&nbsp;&nbsp;";
        echo round(filesize($dirFile)/1024,2)."KB"."&nbsp;&nbsp;&nbsp;&nbsp;";
        echo filetype($dirFile)."&nbsp;&nbsp;&nbsp;&nbsp;";
        echo filectime($dirFile)."<br/>";
        if(is_dir($dirFile))
        {
            if($file=="." || $file=="..")
                continue;
            listDir(opendir($dirFile),$dirFile,$number+2);
        }

    }

    closedir($handle);
}
listDir($handle,$dir);

建立和删除目录

建立目录:mkdir()
删除目录:rmdir()

但目录如果非空,则需要用unlink()删除目录的每个文件
//清空一个目录
<?php 
header("content-type:text/html;charset=utf-8");

function deleteDir($dir) {
    $handle=opendir($dir);
    while($file=readdir($handle))
    {
        //如果是目录,就删除目录下的所有文件
        if($file!="." && $file!=".."){
            $subfile=$dir.DIRECTORY_SEPARATOR.$file;
            if(is_file($subfile))
            {
                unlink($subfile);
            }
            if(is_dir($subfile))
            {
                deleteDir($subfile);
            }
        }

    }
    closedir($handle);
    rmdir($dir);
}

mkdir("test");
deleteDir("test");

文件操作

1.打开与关闭文件

打开文件

fopen(文件名,打开方式)
必须指定打开方式,指定打开方式,操作系统才知道对这个文件怎么操作(对这个文件加什么样的锁)

打开方式有下面几种:
r:只读方式
r+:读写方式
w:只写方式。清空文件开始写,文件不存在创建文件
w+:读写方式。清空文件开始读写,文件不存在创建文件
a:写入方式。从文件末尾开始写,文件不存在创建文件
a+:写入方式。从文件末尾开始读写,文件不存在创建文件
x:创建文件并以写入方式打开,如果文件存在,返回false
x+:创建文件并以读写方式打开,如果文件存在,返回false

关闭文件

fclose()关闭fopen()打开的额文件

2.读取与写入文件

写入文件

即将程序中的数据写入一个文件中:

fwrite($handle,文件内容,[文件长度])

<?php 
header("content-type:text/html;charset=utf-8");
$handle=fopen("text.txt","w");
for($i=0;$i<10;$i++)
{
    fwrite($handle,($i+1)."heheehrwerer\r\n");//windows系统中,换行符是\r\n
}
fclose($handle);

快速写入:file_put_contents()
file_put_contents()和依次调用fopen()、fwrite(fputs())、fclose()一样。

读取文件

fread() 读取打开的文件

<?php 
clearstatcache();
$handle=fopen("text.txt","r");
//feof()用于判断文件是否到结尾
while(!feof($handle))
{
    echo fread($handle,1024);
}
//或者使用
fread($handle,filesize("text.txt"));

注意:要想读取全部的文件,使用file_get_contents()性能高

fgetc()和fgets()

fgetc()从文件中读取1个字符,遇到EOF返回

fgets($handle,length)
从文件中读取最多length-1个字符,如果忽略length,默认length为1024。
或者,fgtes()在遇到换行符或EOF时返回。

file()与file_get_contents()

file()和file_get_contents()函数相似
不过file()函数将文件内容返回到数组中,数组中的每个元素是一行

<?php 
print_r(file("text.txt"));

readfile()立即将文件输出到输出缓冲区

<?php 
readfile("text.txt");//直接将text.txt文件内容输出到浏览器

3.文件指针

ftell()返回当前文件指针位置
fseek($handle,offset)//默认从0开始移动offset个位置

SEEK_CUR 从当前指针处移动offset个位置
SEEK_END 从末尾指针向前移动offset个位置(offset是负数)

rewind()重置指针

<?php 
$handle=fopen("text.txt","r");
echo fread($handle,2);//指针移动到2
echo ftell($handle);//2
fseek($handle,8,SEEK_CUR);//指针为2+8=10处
fseek($handle,-2,SEEK_END);//最后指针位置-2
echo ftell($handle);

文件锁

锁,是为了控制文件并发。防止多个用户操作文件时,使文件发生数据不一致的情况。
flock($handle,$operation)

$operation的值为:
LOCK_SH 共享锁(读锁)
LOCK_EX 独占锁(写锁)
LOCK_UN 释放锁

使用flock()锁定的资源文件,可以被fclose()释放

文件上传于下载

文件上传与下载(一)
文件上传与下载(二)
文件上传与下载(三)

你可能感兴趣的:(PHP,文件系统)