• php 之 文件操作(0524)


    php中文件包含两种:文件,文件夹。文件夹又称目录

    新建一个文件aa.txt和一个文件夹text,text文件夹下又包含bb.txt

    一、判断文件类型
    filetype("./aa.txt");  //取文件类型 : 返回file 文件
    filetype("./text");    //取文件类型 : 返回dir 目录
    is_dir("./text");      //判断是否是目录 : 返回true
    is_dir("./aa.txt");   // 判断是否是目录 : 返回false
    is_file("./aa.txt");   //判断是否是文件 :返回true

    二、文件属性
    echo date("Y-m-d H:i:s",fileatime("./aa.txt"));      //文件上次访问时间 :2016-05-24 09:05:01
    echo date("Y-m-d H:i:s",filectime("./aa.txt"));      //文件创建时间 :2016-05-24 09:05:01
    echo date("Y-m-d H:i:s",filemtime("./aa.txt"));     //文件修改时间 :2016-05-24 11:05:27
    echo filesize("./aa.txt");                                      //文件大小  : 返回2
    var_dump(file_exists("aa.txt"));                          //文件是否存在 :  返回boolean true

     


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


    echo $_SERVER['DOCUMENT_ROOT'];    //取服务器(www)根路径 : 返回E:/PHP/wampserver/wamp/www/

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

    echo basename("./aa.txt", ".txt");          //路径中获取文件名(去掉后缀) :  返回aa
    echo dirname("./text/bb.txt");                   //路径中目录名  : 返回:./text
    var_dump(pathinfo("./aa.txt"));                //返回文件信息 : 返回数组

    例子:
      显示结果:array (size=4)
      'dirname' => string '.' (length=1)
      'basename' => string 'aa.txt' (length=6)
      'extension' => string 'txt' (length=3)
      'filename' => string 'aa' (length=2)


    var_dump(pathinfo("./text/bb.txt"));//返回文件信息 : 返回数组
      显示结果:array (size=4)
      'dirname' => string './text' (length=6)
      'basename' => string 'bb.txt' (length=6)
      'extension' => string 'txt' (length=3)
      'filename' => string 'bb' (length=2)

    echo realpath("./text/bb.txt");              // 返回规范化的绝对路径.把相对路径转换为绝对路径  E:PHPwampserverwampwww524 extb.txt

    echo realpath("./aa.txt");                    //   E:PHPwampserverwampwww524aa.txt

    四、目录操作:


    1.遍历目录:第一种方法
    var_dump(glob("./ueditor/utf8-php/*"));       //返回目录下所有的文件
    var_dump(glob("./ueditor/utf8-php/*.js"));    //可以根据后缀筛选

    例子:

    var_dump(glob("../0503lianxi/*.php"));         //返回该目录下所有.php文件数组.*代表所有,可以根据后缀筛选
      显示结果: array (size=6)
        0 => string '../0503lianxi/Add1.php' (length=22)
        1 => string '../0503lianxi/AddChu.php' (length=24)
        2 => string '../0503lianxi/Delete1.php' (length=25)
        3 => string '../0503lianxi/Update1.php' (length=25)
        4 => string '../0503lianxi/UpdateChu.php' (length=27)
        5 => string '../0503lianxi/Zhu1.php' (length=22)

     

       例题1 :获取文件夹下所有文件个数

    echo ShuLiang("../0503lianxi");
    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++;	
    			}	
    		}
    		return $sl;
    	}	
    	else if(is_file($filename))
    	{
    		return 1;	
    	}
    	else
    	{
    		return 0;	
    	}
    }
    

    遍历目录:第二种方式
    $dir = opendir("../0503lianxi");     //打开目录资源

     echo readdir($dir);                    //返回目录的一个文件,读一次指针向下走,注意前两个

    echo readdir($dir)."<br>";     //返回.
    echo readdir($dir)."<br>";     //返回..
    echo readdir($dir)."<br>";     //返回Add1.php
    echo readdir($dir)."<br>";     //返回AddChu.php

     

    平时用这种方法去取目录时要注意去掉前两个 . 和 ..

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

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

     若想再重新输出一次:

    echo rewinddir($dir);                 //指针返回最初
    echo readdir($dir)."<br>";     //返回.
    echo readdir($dir)."<br>";     //返回..

     

    echo closedir($dir);                   //关闭目录资源*/

     作业:写方法计算文件夹大小:

    echo dir_size("../0513lianxi");
    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;               //返回大小
        }
    

      

    运行结果:返回5631(字节)

    2.创建目录

    mkdir("./cc.php"); 

    3.删除目录

     rmdir("aa");//删除目录,目录必须为空才可以删除

    4.重命名或移动
    rename("老路径","新路径");

    五、文件整体操作:

    touch("./ss.php");    //创建文件
    copy("源","目标");    //复制文件
    unlink("./aa.txt");   //删除文件
    echo file_get_contents("./text/bb.txt");                   //读取文件内容(本地)
    echo file_get_contents("http://www.baidu.com");  //读取远程内容(远程)  

    file_put_contents("aa.txt",file_get_contents("http://www.baidu.com"));      //写入文件内容(覆盖)
    readfile("aa.txt");  //读取文件并输出

    $attr = file("aa.txt");   //将文件中每行数据放到数组
    var_dump($attr);

    六、文件内容操作:
    打开文件资源:
    $fp = fopen("文件名","模式 r w");
    r只读;r+读写;w写清空;w+读写;a写入文件末尾;a+读写;x创建并以写入打开;x+创建并以读写打开;加一个b代表可操作二进制文件(建议加)

    'r' 只读方式打开,将文件指针指向文件头。
    'r+' 读写方式打开,将文件指针指向文件头。
    'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE ,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
    'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。 

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

    fwrite($fp,"123456");    //写入内容
    echo fgetc($fp);            //获取文件内容(一个字符一个字符读)
    echo fgetc($fp);
    echo fgetc($fp);
    echo fgetc($fp);
    echo fgetc($fp);
    fgets($fp);                    //一次读一行
    fread($fp,10);            //读多长
    feof($fp);                     //如果文件出错或到末尾返回true

  • 相关阅读:
    ubuntu 12.04 mysql转移目录后 无法 启动
    thinkphp 缓存写入失败,网站报错
    python 访问php程序,实现定时
    Linux下通过软链接转移mysql目录,解决分区空间不足(转)
    nginx 自定义代理返回 404
    discuz xplus 模板 没解析的问题
    svn 日志 offline 错误
    nginx 代理 proxy_pass设置
    discuz注册 内部错误
    centos 不支持mysql
  • 原文地址:https://www.cnblogs.com/ds-3579/p/5523169.html
Copyright © 2020-2023  润新知