第9天 PHP目录及文件操作

PHP操作目录

1、目录****和目录

目录:可以说是一个文件夹,带有盘符的一系列的路径
文件:目录下用来存储内容的容器

2、创建新目录mkdir()

描述:尝试新建一个由 pathname 指定的目录。
语法:**bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false ]] )**
参数:
$pathname:指定目录的路径;
$mode:默认的 mode 是 0777,意味着最大可能的访问权。$mode在windows下被忽略。 注意$mode的值为八进制。  7=4+2+1  4代表可读 2代表
可写  1代表可执行
$recursive:如果指定的路径的上级目录不存在,则也会递归创建。
返回值:成功时返回TRUE,失败时返回FALSE。
第9天 PHP目录及文件操作_第1张图片
image.png

3、判断是否是一个目录is_dir()

描述:判断给定文件名是否是一个目录。
语法:bool is_dir ( string $filename )
返回值:如果文件名存在,并且是个目录,返回 TRUE,否则返回FALSE。

第9天 PHP目录及文件操作_第2张图片
image.png

4、判断目录或文件是否存在file_exists()

语法:bool file_exists ( string $filename )
提示:可以判断文件,也可以判断目录,是否存在。
返回:如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。

第9天 PHP目录及文件操作_第3张图片
image.png

5、删除目录rmdir()

语法:bool rmdir ( string $dirname )
参数:$dirname目录路径。
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
提示:尝试删除 dirname 所指定的目录。 该目录必须是空的,且要有相应的权限。

第9天 PHP目录及文件操作_第4张图片
image.png

6、更改目录的访问权限chmod()

描述:改变文件的访问权限
语法:bool chmod ( string $filename , int $mode )
参数:
$filename,指定文件的路径;
$mode,mode 参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。每一部分都可以通过加入所需的权限来计算出所要的权限。数字 1 表示使文件可执行,数字 2 表示使文件可写,数字 4 表示使文件可读。加入这些数字来制定所需要的权限。
提示:在window下文件的只读权限是 0444。文件夹只读权限0555。

8、重命名或移动文件或目录rename()

描述:重命名或移动一个文件或目录。如果文件不存在同一目录下,就是移动。
语法:**bool rename ( string $oldname , string $newname )**
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。

第9天 PHP目录及文件操作_第5张图片
image.png

9、打开目录opendir()

描述:打开目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。
语法:resource opendir ( string $path )
返回值:如果成功则返回目录句柄的 resource,失败则返回 FALSE。

第9天 PHP目录及文件操作_第6张图片
image.png

10、读取目录中****目录和文件****readdir()

描述:从目录句柄(资源)中读取条目 ;
语法:string readdir ([ resource $dir_handle ] )
说明:返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
返回:成功则返回文件名 或者在失败时返回 FALSE 。

第9天 PHP目录及文件操作_第7张图片
image.png

12、关闭目录句柄closedir()

描述:关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。
语法:**void closedir ( [resource dir_handle,则默认为最后由opendir()打开的目录句柄。

image.png

13、scandir

描述:列出指定路径中的文件和目录
语法:array scandir ( string $directory [, int $sorting_order [, resource $context ]] )
提示:只能遍历一级

第9天 PHP目录及文件操作_第8张图片
image.png

区别: 1、readdir 一次只能读取一个目录或者文件,循环可以读出所有的目录和文件,需要打开目录
2、scandir可以一次把所有的目录和文件夹都读出来,不需要打开目录资源
3、如果目录比较多,scandir消耗内存,不要建议

综合实例:递归遍历****某个目录****下的所有****文件夹和文件(面试题)

$dir="../";
   function myscandir($dir,$level=0){
         //定义一个静态数组,来保存遍历出来的所有的文件夹和文件
         //静态变量只会初始化一次
         static $arr=[];
         $files=scandir($dir);
         //print_r($files);exit;
         foreach ($files as $file) {
              if($file=='.' || $file=='..'){
                 continue;
              }
             //目录一定要加上父级目录  
             $temdir=$dir.'/'.$file;    //目录和文件直接要加上'/'
            if(is_dir($temdir)){
                  //目录
                $v['level']=$level;
                $v['is_dir']=1;  //1代表目录
                $v['name']=$file; //目录名字
                $arr[]=$v;
                   //继续进行遍历 ,跟父类的方法一致,形成递归
                   myscandir($temdir,$level+1);
            }else{
                //文件
                 //$v都是用来保存一个文件的信息
                $v['level']=$level;
                $v['is_dir']=0;  //0代表文件
                $v['name']=$file;
                $arr[]=$v;
            }
         }
        return $arr;
   }

       $files=myscandir($dir);
        //echo "
";
        //print_r($files);
    
      //遍历输出  如果是文件夹:蓝色  文件:黑色
      
      foreach ($files as  $v) {
           if($v['is_dir']==1){
               echo "".str_repeat("--",$v['level']*10).$v['name']."
"; }else{ echo str_repeat("--",$v['level']*10).$v['name']."
"; } }

效果:


第9天 PHP目录及文件操作_第9张图片
image.png

PHP操作文件

1、打开文件fopen()

描述:打开文件或者 URL
语法:resource fopen ( string mode )
参数:mode,指定文件的打开方式。
提示:为移植性考虑,在用 fopen()打开文件时总是使用 'b' 标记。binary
返回值:成功时返回文件指针资源,如果打开失败,本函数返回 FALSE。
注:以写入方式打开不存在的文件,它自动创建文件

第9天 PHP目录及文件操作_第10张图片
image.png

第9天 PHP目录及文件操作_第11张图片
image.png

2、打开文件的方式

第9天 PHP目录及文件操作_第12张图片
image.png

3、关闭文件fclose()

描述:关闭一个已打开的文件指针
语法:bool fclose ( resource $handle )
参数:$handle必须是由fopen()打开的文件指针。

4、读取指定大小文件内容fread()

描述:读取文件(可安全用于二进制文件)
语法:string fread ( resource $handle , int $length )
参数:$handle是由fopen()创建的handle;$length最多读取的字节数。
提示:在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 ‘b’。
返回值:返回所读取的字符串, 或者在失败时返回 FALSE。

第9天 PHP目录及文件操作_第13张图片
image.png

5、读取一行内容fgets()

描述:从文件指针中读取一行
语法:string fgets ( resource $handle [, int $length ] )
参数:
$handle:文件指针必须是有效的
$length:从 handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
返回值:从指针 handle 指向的文件中读取了 length - 1 字节后返回字符串。 如果文件指针中没有更多的数据了则返回 FALSE。

第9天 PHP目录及文件操作_第14张图片
image.png

6****、读取文件内容到数组中file()

描述:把整个文件读入一个数组中
语法:array file ( string $filename [, int $flags = 0 ] )
参数:
$filename,文件的路径;可以是本地,可以是URL地址
$flags,附加选项;
FILE_USE_INCLUDE_PATH(1):在include_path 中查找文件;
FILE_IGNORE_NEW_LINES(2):在数组的每个元素末尾不添加换行符;
FILE_SKIP_EMPTY_LINES(4):跳过空行。
注意:不需要打开文件和关闭文件。

第9天 PHP目录及文件操作_第15张图片
image.png

7、****读取文件内容到字符串中file_get_contents()

描述:将整个文件读入一个字符串 ,不用打开文件,也不用关闭文件
语法:string file_get_contents ( string $filename )
返回:返回读取的数据,或在失败时返回false。

第9天 PHP目录及文件操作_第16张图片
image.png

8****、写入文件****(****了解****)

描述:写入文件(可安全用于二进制文件)
语法:int fwrite ( resource $handle , string $string )
返回:返回写入的字符数,出现错误时则返回 FALSE 。

第9天 PHP目录及文件操作_第17张图片
image.png

9****、****将一个字符串写入文件**** file_put_contents()

描述:和依次调用 fopen(),fwrite()以及 fclose() 功能一样。
语法:**int file_put_contents ( string $filename , mixed $data [, int $flags = 0] )**
参数:
$filename要被写入数据的文件名。
$data要写入的数据。类型可以是 string,array(一维数组)。
$flags附加选项。
FILE_USE_INCLUDE_PATH(1) 在 include 目录里搜索 filename
FILE_APPEND(8)如果文件 filename已经存在,**追加数据而不是覆盖**。
LOCK_EX(2)在写入时获得一个独占锁。
提示:**如果文件不存在,则会自动创建。如果文件过大,不能一次性处理**。
返回:该函数将返回写入到文件内数据的字节数,失败时返回FALSE。
第9天 PHP目录及文件操作_第18张图片
image.png

11、拷贝文件

描述:将文件从 source 拷贝到 dest。
语法:bool copy ( string $source , string $dest )
提示:如果目标文件存在,则会覆盖。

12****、删除文件

语法:bool unlink ( string $filename )
返回:成功时返回 TRUE, 或者在失败时返回 FALSE。
提示:可以删除虚拟空间之外的文件,但必须使用相对路径(../),但必须有权限。
注意:删除的文件不会进入回收站

第9天 PHP目录及文件操作_第19张图片
image.png

13、其它的文件操作函数

filesize(),可以获取文件大小,单位为字节。
pathinfo:返回一个关联数组包含有 path 的信息。


第9天 PHP目录及文件操作_第20张图片
image.png

filectime(),获取创建文件的时间。
filemtime(),获取文件最后修改时间。


image.png

14、文件下载

php需要修改一个http响应头(http协议)
header("Content-type: application/octet-stream"):服务器给浏览器的内容是二进制流式文件,
header("Content-Disposition: attachment; filename=filename"):告诉浏览器当前数据不需要解析,是附件,本地保存的时候建议使用的文件名字是filename


第9天 PHP目录及文件操作_第21张图片
image.png

作业:
做一个统计网站:如果一个用户去请求对应的脚本文件,记住当前用户的ip地址,访问时间,写入到对应的统计文件(一个用户的一次访问占一行);当用户访问的时候,提示当前用户是第几次访问,是第几个访客;总访问人数是多少;
提示: 1、获取访问用户的IP:$_SERVER[‘REMOTE_ADDR’]
2、获取当前访问时间:time()
3、file()获取信息进行处理
4、第几个访客(IP必须不能重复,一个IP对应一个访客)array_unique()去除数组中的重复值

你可能感兴趣的:(第9天 PHP目录及文件操作)