DAY30

 

     第1章 文件编程的基础

1.1 看一个实际的需求

说明:在我们的web开发中, 我们会使用到文件上传,下载,创建文件,删除用户,创建目录等等,这时我们就需要使用文件编程.

 

1.2 文件的基本概念

数据源, php开发中,数据存放的几种形式, 图示:

1.3 文件的输入流和输出流

  1. php的文件编程中,文件是以字符流或者字节流两种形式来操作.
  2. 画图输入流和输出流

说明

(1) 输入和输出都是针对php程序(即内存)

(2) 读入到php程序【读入内容】, 输入流

(3) php程序,把内容保存到文件中,输出流.

1.4 php操作文件的方式

 


    第2章 php文件编程

2.1 php文件编程函数一览

 一、判断普通文件和目录
    1.is_file()//判断给定文件名是否为一个正常的文件
    2.is_dir()//判断给定文件名是否是一个目录

二、文件的属性
    1.file_exists()//检查文件或目录是否存在
    2.filesize()//取得普通文件大小
    3.is_readable()//判断给定文件名是否可读
    4.is_writable()//判断给定的文件名是否可写
    5.filectime()//获取文件的创建时间
    6.filemtime()//获取文件的修改时间
    7.fileatime()//取得文件的上次访问时间
    8.stat()//获取文件大部分属性值

三、目录的基本操作
     1.basename()//返回路径中的文件名部分
     2.dirname()//返回路径中的目录部分
     3.pathinfo()//返回文件路径的信息
     4.opendir()//打开目录句柄
     5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
     6.rewinddir()//倒回目录句柄
     7.closedir()//关闭目录句柄
     8.mkdir()//新建目录
     9.rmdir()//删除指定的空目录
     10.scandir()//列出指定路径中的文件和目录

四、文件的基本操作
     1.fopen()//打开文件或者 URL
     2.fread()//读取文件
     3.fgets()//从文件指针中读取一行
   4.feof()//测试文件指针是否到了文件结束的位置
     5.fwrite()//写入文件
     6.rewind()//倒回文件指针的位置
     7.flock()//轻便的咨询文件锁定
     8.ftruncate()//将文件截断到给定的长度
     9.fclose()//关闭一个已打开的文件指针
     10.file() //把整个文件读入一个数组中
     11.copy()//拷贝文件
     12.unlink()//删除文件
     13.file_get_contents()//将整个文件读入一个字符串
     14.file_put_contents()//将字符串写入文件中
     15.rename()//重命名一个文件或目录
     16.readfile()//读入一个文件并写入到输出缓冲

2.2 获取文件的信息

  •   获取文件信息的函数

  •  第一种方式

 

 

  •  第二种方式

 

2.3 读取文件的内容,并显示在网页

 

  •  第一种方式

 

上面方式的分析: 我们是一次性的将内容读入到内存,这样处理大文件不是很好,因此这样我们可以使用第二种读取文件的方式.(可以设置缓冲)

  •  第二种方式

 

  •  第三种方式

第三种方式最简洁,使用的是最多的. file_get_contents  file_put_contents()

 

小结:在实际开发中如何选择方式

(1) 如果我们处理的文件很大(100m),建议使用第二种

(2) 如果是普通的文件,没有特殊的要求,建议使用第三种.

 

2.4 第四种方式读取配置文件 config.ini

 

2.5 上机练习

 

xx.ini 的格式

属性名1=属性值1

属性名2=属性值2

2.6 如何创建文件,并写入内容

  •  基本介绍

php中,没有一个专门的函数来创建文件。他是通过fopen函数来实现.

function fopen($file_name, $mode);

说明$mode取值:

(1) $mode 'r' , 表示只读方式打开,将文件指针指向文件头.

(2) $mode 'r+' , 表示方式打开,将文件指针指向文件头

(3) $mode 'w', 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之

(4) $mode 值  'w+', 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之

(5) $mode 'a', 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建

(6) $mode 'a+', 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建

  •  举例说明

(1) 案例1

 

(2) 第二个案例(覆盖写)

(3) 第三个案例

 

  •  使用file_put_contents完成任务

 

推荐大家使用file_put_contents函数.

 

2.7 删除文件

  •  基本:当我们不需要某个文件,尤其是大文件,需要定位清理.
  •  使用unlink函数.
  •  演示案例

 

2.8 修改文件

(1) 修改文件的内容,其实就是前面讲过的写入新内容.

  (2)修改文件名.rename

 

(3) 细节

说明: 如果希望正确保存中文名的文件,则需要进行转码操作.

2.9 操作文件目录( 文件夹)

  •   案例1-创建一级目录

  •  案例2-创建多级目录

创建 d:/tnweb2/aaa/bbb/ccc/ddd

 

  •  删除目录

 

2.10 课堂练习题讲评

 

参考胡同学写的代码.

2.11 文件编程的应用案例

  •  如何拷贝一张图片

 

  •  代码

  •  经典案例1-遍历某个文件夹,判断该文件夹下的内容分别是目录还是文件?

先介绍两个重要的函数

(1) opendir readdir

opendir : 打开一个目录句柄,可用于之后的 closedir() readdir()  rewinddir() 调用中

举例说明

(2) 写一个函数统计某个目录所有文件的大小!(包括子目录

 

代码

(3) 删除某个目录(该目录下有文件和文件夹)

 

(4) 把某个目录的所有文件(包括子目录和其文件)拷贝到其它目录下

 

 

<?php
    header('content-type:text/html;charset=utf-8');
    //copy 整个目录

    //DS就是目录分隔符号
    define('DS', DIRECTORY_SEPARATOR); 



    $path='e:/hspweb';
    //这个 $desc目录可以不存在,也可以存在, 会把 e:/hspweb/ 目录
    //下的所有文件及其子目录拷贝到 指定目录 $desc下 [注:只含e:/hspweb本身这个目录名]
    $dest='d:/mymvc';

    copy_r($path,$dest);
    echo 'ok';

    //$path 源目录 $dest 目标目录
    function copy_r( $path, $dest )
    {
        if( is_dir($path) )
        {
            //创建目标目录
            @mkdir( $dest );
            
            //scandir 就是获取到$path目录下的所有的文件和目录
            //放入 $objects 中,他是组数
            $objects = scandir($path);
            


            if( sizeof($objects) > 0 )
            {
                foreach( $objects as $file )
                {
                    if( $file == "." || $file == ".." )
                        continue;
                    // go on
                    if( is_dir( $path.DS.$file ) )
                    {
                        copy_r( $path.DS.$file, $dest.DS.$file );
                    }
                    else
                    {
                        copy( $path.DS.$file, $dest.DS.$file );
                    }
                }
            }
            return true;
        }
        elseif( is_file($path) )
        {
            return copy($path, $dest);
        }
        else
        {
            return false;
        }
    }

 

  •  额外的说明一下 . ..

:

 

(1) 不管是windows还是linux/unix操作系统每个目录下都有 . ..

(2) 一般情况下,操作系统会隐藏这个两个目录

(3) . .. 我们应该理解成他们不是真实目录, 而是分别代表 . 代表当前这个目录,   ..代表上一级目录.

(4) 可以联合使用 比如,我们希望找到当前目录的上一级目录  ../   ../../

2.12 作业练习

练习题

  1. 遍历显示某个文件夹下所有的文件和目录名 /   
  2. 编写一个程序,要求如下: (这个课上练习!)

(1) 编写一个Dog

(2) 创建3Dog对象,然后序列化存放到 d:/dog文件夹下

(3) 通过遍历d:/dog 可以反序列化所有的Dog对象

原文地址:https://www.cnblogs.com/qianjilou/p/6518615.html