5月24 文件操作

php中文件包含文件和文件夹,其中文件夹又称为目录

以下的操作都是在同一级目录(test0524)下新建文件:aa.txt以及文件夹test,并且test中含有文件bb.txt

一:判断文件类型(都是以数组形式输出)

filetype("./test");    //判断文件类型,返回dir目录

filetype("./aa.txt");  //判断文件类型,返回file文件

由上可知判断文件类型,如果是文件返回file,如果是目录返回dir

is_dir("./test");  //判读给定的路径是不是目录,返回bool型

is_file("./aa.txt");  //判读给定的路径是不是文件,返回bool型

 

二:判断文件属性

echo date("Y-m-d H:i:s",fileatime("./aa.txt"));   //获取文件的上次访问时间

echo date("Y-m-d H:i:s",filectime("./aa.txt"));   //获取文件的创建时间

echo date("Y-m-d H:i:s",filemtime("./aa.txt"));  //获取文件的修改时间

echo filesize("./aa.txt");   //获取文件的大小

var_dump(file_exists("./aa.txt"));    //判断文件名是否存在

 

三:文件的路径

1. 当前目录:./ 或者不写
2. 上级目录: ../
3. 下级目录:文件夹名/
4. 根目录:/
根目录/有两层意思:如果/是在php程序里面的话代表:硬盘根目录,如果/是在网页里的话代表:代表服务器的根目录(www)。
做文件上传(头像,产品图片),保存在数据的路径一定要写绝对路径

例题:

var_dump(file_exists("/wamp"));   //代表是硬盘的根目录(是e盘下的文件)

<img src="/2.jpg" />    代表的是服务器的目录(www)外面的2.jpg

 

echo $_SERVER['DOCUMENT_ROOT'];    //取服务器www的根目录  返回结果  E:/wamp/www/

 

echo basename("./aa.txt");    //从路径中获取文件名    aa.txt

echo basename("./aa.txt",".txt");    //返回没有后缀的文件名    aa

echo dirname("./test/bb.txt");    //返回路径中的目录   ./test

var_dump(pathinfo("./test/bb.txt"));   //返回文件信息   

echo realpath("./test/bb.txt");      //将相对路径转为绝对路径   E:\wamp\www\test0524\test\bb.txt

但是当已经为绝对路径是返回为空

 

四:目录操作

(1)遍历目录的第一种方法

 

var_dump(glob("./ueditor/utf8-php/*"));         //返回目录下所有的文件

var_dump(glob("./ueditor/utf8-php/*.js"));     //可以根据后缀筛选

 

例题:(1)获取文件的个数

function ShuLiang($filename)
{
    if(is_dir($filename))//判断是否是目录
    {
        $attr = glob($filename."/*");
        $sl = 0;
        foreach($attr as $v)
        {
            if(is_dir($v))
            {
                $sl = $sl+ShuLiang($v);    
            }
            else
            {
                $sl = $sl+1;    
            }
        }
        return $sl;    
    }
    else if(is_file($filename))//判断是否是文件
    {
        return 1;    
    }
    else
    {
        return 0;    
    }
    
}


echo ShuLiang("../FUXI");
View Code

 

(2)获取文件的大小

方法一(1)网上找来的

<?php
//计算文件的大小

echo dir_size("../test0521");
function dir_size($dir)
{
        $dh = opendir($dir);             //打开目录,返回一个目录流
        $size = 0;      //初始大小为0 
        while(false !== ($file = @readdir($dh)))
        {     //循环读取目录下的文件
           if($file!='.' and $file!='..')
           {
            $path = $dir.'/'.$file;     //设置目录,用于含有子目录的情况
                if(is_dir($path))
                {
                $size += $this->dir_size($path);  //递归调用,计算目录大小
                }
                elseif(is_file($path))
                {
                    $size += filesize($path);   //计算文件大小
                }
            } 
        }   
        closedir($dh);             //关闭目录流
        //return $size;               //返回大小
    }

?>
View Code

 

方法二(2)自己做的

<?php
//获取文件的大小
//filesize("./aa.txt");

function Size($filename)
{
    if(is_dir($filename))//判断是否是目录
    {
        $attr = glob($filename."/*");
        $size = 0;
        foreach($attr as $v)
        {
            if(is_dir($v))
            {
                $size = $size+Size($v);    
            }
            else
            {
                $size = $size+filesize($v);    
            }
        }
        return $size;    
    }
    else if(is_file($filename))//判断是否是文件
    {
        return filesize($filename);    
    }
    else
    {
        return 0;    
    }
    
}
echo Size("../test0521");
?>
View Code

 

(2)遍历目录的第二种方法(有开启和关闭)

打开目录资源

$dir = opendir("./liucheng");

 

操作

echo readdir($dir)."<br>";//读文件 . 当前目录

echo readdir($dir)."<br>";//读文件 ..上级目录

echo readdir($dir)."<br>";//读文件

输出的结果:

 

 

    while($v=readdir($dir))
    {
      if($v=="."||$v=="..")
      {

      }
      else
      {
        echo $v."<br>";
      }
    }

 

 将上级和当前目录去掉,遍历文件名

关闭目录资源

closedir($dir);

 

rewinddir($dir);//重置目录资源的指针

 

目录操作

mkdir("./aa");   //创建目录

rmdir("./aa");   //删除是有要求的必须是空的文件夹

rename("./test","./aa/test1");    //移动 老的路径和新的路径(在移动过程中可以重命名)

 

五:文件操作

touch("cc.php");    //创建文件可以.php .txt .dox

copy("./aa.txt","../aa.txt");   //复制文件

unlink("./cc.txt");   //删除文件

echo file_get_contents("./aa.txt");    //读取文件的内容

echo file_get_contents("http://www.baidu.com");    //读取本地或者远程

file_put_contents("./aa.txt","权志龙");   //往文件里面写入内容

file_put_contents("aa.txt",file_get_contents("http://www.baidu.com"));      //写入远程文件内容(覆盖)

readfile("./aa.txt");      //读取文件内容并显示,不用输出

var_dump(file("./aa.txt"));    //读取文件内容并且返回数组,数组里面是每一行

 

六:对文件内容的具体操作

打开文件资源:

$fp = fopen("文件名","模式 r w");

r只读;r+读写;w写清空;w+读写;a写入文件末尾;a+读写;x创建并以写入打开;x+创建并以读写打开;加一个b代表可操作二进制文件(建议加)


打开文件资源

$fp = fopen("./aa.txt","a");

操作

echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);  //输出以字节方式耗时较长
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);

循环遍历的方式

while($v=fgetc($fp))
{
echo $v;     //一个一个来的
}
 

获取文件内容一行一行的来,用处并不是很大

echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);


echo fread($fp,5);   //读取文件内容,可以读取一定长度的内容

fwrite($fp,"hello");    //写入内容,会将原有的内容覆盖(a方式会追加,w方式会覆盖)

关闭文件资源

fclose($fp);

摘自PHP手册

 

posted @ 2016-05-25 16:07  Durriya  阅读(166)  评论(0编辑  收藏  举报