PHP核心编程--目录操作(包含文件操作)

Posted QinXiao.Shou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP核心编程--目录操作(包含文件操作)相关的知识,希望对你有一定的参考价值。

一.目录操作

1.    创建目录

创建目录mkdir(目录名称)  //返回值为布尔

一次性创建主目录及其子目录

判断是不是一个目录is_dir  //返回true,false

判断目录或文件是否存在file_exists  //返回值为布尔

 

 

返回路径中的目录部分 dirname

 

 

 

 

2.    打开目录,

opendir — 打开目录句柄

opendir(目录路径) //返回的是一个目录句柄.

readdir(目标句柄)  //读取目录中的条目, 

 

目录名为零的处理

//目录名中文的处理

iconv(in_charset, out_charset, str)

//说明:

//将字符串由in_charset字符集 转为 out_charset字符集

//如:

iconv(‘gbk’, ‘utf-8’, $str); //将$str由字符集gbk,转为utf-8; 

 

 

 

3.    关闭目录

Closedir(目标句柄);//关闭目录,是为了释放内存资源.

有打开必须有关闭.  Opendir,与closedir成对出现.

 

 

 

4.    目录重命名, 移动目录

         rename(oldname, newname)  //将oldname修改为newname;  //返回值为布尔

 

5.    删除目录,

rmdir(目录名称) //返回值为布尔

 

 

 

 

二.文件操作

1.    打开文件

打开文件的方式fopen

fopen(文件路径,打开模式);  //返回的文件句柄;

is_file 文件判断,返回布尔. 

2.    关闭文件

        fopen //返回的文件句柄

        fclose(文件句柄); //释放内存资源

         有打开就有关闭.

3.    写入文件

        fwrite(文件句柄,字符串);

4.    读取文件内容:

1)        读取一个字符(字节)

fgetc(文件句柄)

 

对读取到0时的处理: 

 

2)        读取一行字符

  fgets

实例图片计时器

 1 <?php 
 2 // 图片计数器
 3 
 4 // 第一步:对计数器文本文件进行初始化,也就是创建计数器文件,并将0写入
 5     $filename = \'./count.txt\';
 6     if (!file_exists($filename)) {
 7         // 以写入的方法打开,返回文件句柄
 8         $handle = fopen($filename,\'w\');
 9         // 将0写入
10         fwrite($handle,0);
11         // 关闭句柄
12         fclose($handle);
13     }
14 // 第二步:按行 读取 计数器中的数字,同时将数字加1,将新数字写入到计数器文本中
15     $handle = fopen($filename,\'r+\');//以r+模式打开文件,由于在此模式下可读可写
16     $line = fgets($handle); //将计数器中的数字读取,788
17     $line++; //789
18     // 将加1后的新数字写入计数器
19     rewind($handle); //将指针复位
20     fwrite($handle,$line);//将789写入计数器
21     fclose($handle);
22 
23 // 第三步:按字符读取 将计数器中的数字,一个一个读取,同时将读取的数字和image目录中的图片名称进行匹配
24     $handle = fopen($filename,\'r\');
25     // 循环一个一个的读取计数器中的数字
26     while (false !== ($char = fgetc($handle))) {
27         echo "<img src=images/$char.jpg />";
28     }
29     fclose($handle);
30  ?>

 

 

 

 

3)        读取指定大小的内容,

fread(文件句柄,长度);  //说明,长度的单位是字节

 

 

 

feof(文件句柄)  //文件的指针在文件的末尾

 

4)        不用打开和关闭

直接将文件读入字符串 file_get_contents

直接将字符串写入文件 file_put_contents

 

 

 

5.    拷贝文件

 

 

 

 

5)        删除一个目录中所有子目录及文件

Rmdir //只能删除空目录

Unlink//只能删除文件

删除整个文件夹(里面包含文件)的小例子:

 1  <?php 
 2 // 删除一个目录中所有子目录和文件
 3 // rmdir  只能删除文件目录
 4 // unlink 
 5  // 定义函数
 6 
 7 // $filename = \'./phpMyAdmin\';
 8 // $filename = \'./phpMyAdmin\';
 9 /*function delAll($path){
10     if (is_dir($path) ){
11         // 如果是目录则打开
12         $handle = opendir($path);
13         // 从目录句柄中循环读取
14         while (false !== ($file = readdir($handle))) {
15             // 注意此时的.,..必须跳过,否则将删除你当前文件所在磁盘中的所有文件!!!!!
16             if ($file==\'.\'||$file==\'..\') {
17                 continue;
18             }
19             // 如果是目录则递归,如果不是目录则直接unlink
20             if (is_dir($path.\'/\'.$file) ){
21                 delAll($path.\'/\'.$file);
22             }else{
23                 unlink($path.\'/\'.$file);
24             }
25 
26 
27         }
28         closedir($handle);
29         rmdir($path);
30     }
31 }
32  // 调用函数
33 delAll($filename)
34 ?>

还有几个经典练习例子:

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Document</title>
  6 </head>
  7 <body>
  8 
  9 
 10 <!-- 
 11 第2题:
 12 题型:代码题
 13 难度:3级
 14 题干:
 15 编写一段程序,递归显示某个指定目录中(如phpMyAdmin)所有子目录及文件。
 16  -->
 17 <?php 
 18 $filename = \'./phpMyAdmin\';
 19 function showfiles($path){
 20     $handle = opendir($path);
 21     echo "<ul>";
 22     while (false !== ($file = readdir($handle))){
 23         if ($file =="."|| $file == "..") {
 24             continue;
 25         }
 26         if (is_dir($path.\'/\'.$file)) {
 27             showfiles($path.\'/\'.$file);
 28         }else {
 29             echo "<li>$file</li>";
 30         }
 31     }
 32     echo "</ul>";
 33     closedir($handle);
 34 }
 35 showfiles($filename);
 36 
 37 
 38 
 39 
 40 
 41 // 第3题:
 42 // 题型:代码题
 43 // 难度:3级
 44 // 题干:
 45 // 编写一段程序,递归删除某个指定目录中(如phpMyAdmin)所有子目录及文件。
 46 // 提示:在执行删除目录及文件时,一定要过虑掉“.”和“..”,避免删除上层目录中的目录及文件,十分危险。!!!!!!!
 47 $filename = \'./mytest\';
 48 function delfiles($path) {
 49     $handle = opendir($path);
 50     while (false !== ($file = readdir($handle))) {
 51         if ($file==\'.\'||$file==\'..\') {
 52             continue;
 53         }
 54         if (is_dir($path.\'/\'.$file)) {
 55             delfiles($path.\'/\'.$file);
 56         }else {
 57             // 删除文件
 58             unlink($path.\'/\'.$file);
 59         }
 60     }
 61     closedir($handle);
 62     // 删除文件夹
 63     rmdir($path);
 64 }
 65 
 66 delfiles($filename);
 67 
 68 
 69 
 70 // 第4题:
 71 // 题型:代码题
 72 // 难度:3级
 73 // 题干:
 74 // 编写一段程序,用图片来实现访问量效果。当每次进入该页面,访问量加1,访问量值保存到记事本中。读取记事本中访问的数值,并将访问量的每一个数,用对应的图片显示出来。页面最后显示“你是第n位访问者”。
 75 // 提示:参考答案中提供了0到9的数字图片。;
 76 
 77 
 78 $filename = \'./count.txt\';
 79 if (!file_exists($filename)) {
 80     $handle = fopen($filename,\'w\');
 81     fwrite($handle,0);
 82     fclose($handle);
 83 }
 84 
 85 $handle = fopen($filename,\'r+\');
 86 $line = fgets($handle);
 87 $line++;
 88 rewind($handle);
 89 fwrite($handle,$line);
 90 fclose($handle);
 91 
 92 $handle = fopen($filename,\'r\');
 93 echo "<span style=\'color:blue;font-size:30px;font-weight:700\'>你是第</span>";
 94 while (false !== ($file=fgetc($handle))) {
 95     echo "<img src=images/$file.jpg />";
 96 }
 97 echo "<span style=\'color:blue;font-size:30px;font-weight:700\'>位访问者!</span>";
 98 fclose($handle);
 99 
100 
101 /*
102 第一题!!!递归应用
103 复制文件:并且从一个文件夹移动到另一个文件夹*/
104 
105 $filename = \'./phpMyAdmin\';
106 // $aimfilename =\'./phpMyAdmin_copy\';
107  // $aimfilename =\'../student/a/b/c/phpMyAdmin_copy\';
108 function read_copy($dirpath,$aim_path) {
109     $handle_dir = opendir($dirpath);
110     while (false !== ($file = readdir($handle_dir))) {
111         if ($file==\'.\'||$file==\'..\') {
112             continue;
113         }
114         if (is_dir($dirpath.\'/\'.$file)) { //如果是文件夹
115             if (file_exists($aim_path.\'/\'.$file)) {  //有该文件夹的话
116                 read_copy($dirpath.\'/\'.$file, $aim_path.\'/\'.$file);
117             } else {  //没有该文件夹的话
118                 mkdir($aim_path.\'/\'.$file,0777,true);
119                 read_copy($dirpath.\'/\'.$file, $aim_path.\'/\'.$file);
120             }
121             
122         } else {  //如果是文件
123             if (file_exists($aim_path)) {
124                 copy($dirpath.\'/\'.$file, $aim_path.\'/\'.$file);
125             } else {
126                 mkdir($aim_path,0777,true);
127                 copy($dirpath.\'/\'.$file,$aim_path.\'/\'.$file);
128             }
129             
130         }
131         
132     }
133     closedir($handle_dir);
134 }
135 read_copy($filename,$aimfilename);
136 ?>
137 
138 
139     
140 </body>
141 </html>

 

以上是关于PHP核心编程--目录操作(包含文件操作)的主要内容,如果未能解决你的问题,请参考以下文章

用php 进行对文件的操作 (上)

PHP核心编程--文件上传(包含多文件上传)

Elasticsearch-PHP 索引操作

黑马程序员 C++教程从0到1入门编程笔记6C++核心编程(文件操作)

php课程---文件操作及文件上传的代码总结

什么是Java多线程编程?