zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    TOJ 2710: 过河 路径压缩
    树状数组模板
    TOJ 2017: N-Credible Mazes
    TOJ 4804: 树网的核
    Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
    Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
    TOJ 2541: Paper Cutting
    CODE FESTIVAL 2017 qual B
    hiho[Offer收割]编程练习赛30
    Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
  • 原文地址:https://www.cnblogs.com/mrszhou/p/7499910.html
Copyright © 2011-2022 走看看