php文件操作笔记

1.文件处理
2.目录处理
3.文件上传和下载


所有文件操作函数 都是php提供的 基于 linux/Unix 模型的 


文件处理
   1. 文件类型
      以linux为模型 在window中只能获取file dir  unknow 类型
      在linux下面 有dlock  char dir fifo file link unknow  类型
      block  块设备文件 磁盘分区  软驱 cd-rom等
      char   字符设备 I/O 以字符为单位的设备  键盘  打印机
      dir    目录类型 目录也是文件的一种
     
   2. 文件属性
   3. 和文件目录的函数
         相对路径  ./  当前目录  
         绝对路径  从根目录开始
       路径分隔符
         linux/Unix  "/"
         window    "\"  因为这个反斜杠 在双引号里面是\转移字符 所以你要用\\才可以
         DIRECTORY_SEPARATOR  这个常量会自动检测系统 然后用相应系统的路径分隔符
         但是不管什么系统 都支持正斜杠
         / 在php中 是指操作系统的跟
         / 在浏览器中是指网站的根目录
         
   4. 文件的打开与关闭
       读取文件 
           file_get_contents();
           file();
           readfile();
           fopen();
           fread();
           fgetc();
           fgets();
       写入文件
           file_put_contents();
           fopen();
           fwrite();  别名  fputs();
   5. 文件内部移动指针
   6. 文件的锁定机制
   7. 文件操作  创建 删除 移动
   
目录操作
   1. 目录的遍历
       opendir()  打开目录
       readdir()
       closedir()
       rewinddir()
   2. 目录的创建
   3. 目录的删除
   4. 目录的复制
   5. 统计目录大小
   
文件上传下载  


=========================================================
文件处理 
 filetype(dir)  获取目录类型   file  dir
 is_dir — 判断给定文件名是否是一个目录
 is_executable — 判断给定文件名是否可执行
 is_file — 判断给定文件名是否为一个正常的文件
 is_link — 判断给定文件名是否为一个符号连接
 is_readable — 判断给定文件名是否可读
 is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
 is_writable — 判断给定的文件名是否可写
 is_writeable — is_writable 的别名


文件属性
file_exists() 检查文件或目录是否存在
filesize — 取得文件大小
fileatime — 取得文件的上次访问时间
filectime — 取得文件的 inode 修改时间
filegroup — 取得文件的组
fileinode — 取得文件的 inode
filemtime — 取得文件修改时间
  fileowner — 取得文件的所有者
  fileperms — 取得文件的权限
  stat      - 返回文件的各种详细信息 数组表示
文件目录
  basename  - 返回目录中文件名的部分
  dirname   - 返回目录中目录的部分
  pathinfo — 返回文件路径的信息
文件操作
  touch()   创建文件
  unlink()  删除文件
  rename()   移动文件 和文件重命名  remove(当前文件路径,目标文件路径);  rename('a.txt','b.txt');
  copy(source,desc)    复制文件  将文件从 source 拷贝到 dest。成功时返回 TRUE, 或者在失败时返回 FALSE. 
  chgrp()   改变文件属组
  chmod()   改变文件模式
  chown()   改变文件所有者
  file_get_contents()  简单获取一个文件放入字符串中
  file_put_contents()  写入一个文件 没有就新建 有的话就覆盖 返回写入的length
  readfile()   简单读取并输出整个文件
  file()       简单把一个文件写入一个数组里面 每行是一个下标
  ========简单读取 不能从指定的部分读取 也不能给文件加锁
  
  fopen(文件地址,打开方式) 打开文件或者url
    'r'只读方式打开,将文件指针指向文件头。 
    'r+'读写方式打开,将文件指针指向文件头。 
    'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 
    'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 
       w+  除了可以用 fwrite()写 还可以fread() 读
    'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 
    'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 这个不错
    'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。 
    'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
    'b' 以二进制打开文件 (图片 电影) windiw系统可以区分 二进制和文本 uinux不区分 所以你得连写 wb 否则一个b没用  wb 就是以二进制写入  rb  就是读取二进制 
    't' 以文本模式打开文件
  fclose(资源句柄)  关闭资源  必须是 fopen打开的
  fwrite(要写的资源,写的内容)   文件写入  和 fputs() 是别名
  fread(要读的资源句柄,文件名称);   是全部读出来  fread($file,filesize('a.txt')); 第二个参数 是读取多少长度如果是本地文件 可以获取长度的 如果是远程文件 就不要用这个读取 
  feof(文件资源句柄)  判断文件是否读取完了  读完了 就返回true  否则返回 false

  fgetc(文件资源句柄)   一次读取一个字符

fgetcsv从文件指针中读入一行并解析 CSV 字段

  fgets(文件资源句柄)   一次读取一行内容
  ftell(文件资源句柄)   返回文件指针的位置
  fseek(文件句柄,位置)       指定从哪里开始读  远程文件不可以  SEEK_CUR 从头 SEEK_END 从尾部
     可以设定 每断文字多少长度 然后从某个区域取文件  不过要规划好   
  rewind(文件资源)      回到文件头部  
  flock(资源句柄,加锁解锁)  给文件加锁 第二个参数LOCK_SH 读取时候加锁  LOCK_EX写入的时候加锁 LOCK_UN释放锁定   LOCK_NB不堵塞  可以这样  flock($file,LOCK_EX | LOCK_NB);
  
目录操作
  opendir(目录名)  打开一个目录
  closedir(目录句柄)   关闭一个目录
  readdir(目录句柄)   输出目录里面的第一个文件
  mkdir(目录名称,权限)     创建一个目录
  rmdir(删除目录 )    目录必须是空的
  rename(移动的目录,要移动到哪里)   移动目录函数  rename('a/a.txt','b/b.txt');



【Demo:】
文件属性函数
function  myg($file) {
  if(!file_exists($file)) {
      exit('文件不存在!');
  }else {
      echo "文件类型是".filetype($file).'<br />';	
  }
  if(is_file($file)) {
      echo '这是个文件<br />';
      echo  "文件大小是".filesize($file).'<br />';
  }
  if(is_dir($file)) {
      echo '这是个文件夹';
  }
  if(!file_exists($file)) {
      exit('文件不存在!');
  }
  if(is_readable($file)) {
      echo "可读<br />";	
  }
  if(is_writable($file)) {
      echo "可写<br />";	
  }
  if(is_executable($file)) {
      echo "可执行<br />";	
  }
  echo  "创建时间".date('Y-m-d H:i:s',filectime($file)).'<br />';
  echo  "最后修改时间".date('Y-m-d H:i:s',filemtime($file)).'<br />';
  echo  "最后访问时间".date('Y-m-d H:i:s',fileatime($file)).'<br />';
}




获取文件大小
echo  getSize(filesize('aa.txt'));
function  getSize($size) {
    $dw = "Bye";
    if($size >= pow(2,40)){
        $size = round($size/pow(2,40),2);
        $dw = "TB";
    }
    elseif($size >= pow(2,30)){
        $size = round($size/pow(2,30),2);
        $dw = "GB";
    }
    elseif($size >= pow(2,20)){
        $size = round($size/pow(2,20),2);
        $dw = "MB";
    }
    elseif($size >= pow(2,10)){
        $size = round($size/pow(2,10),2);
        $dw = "KB";
    }
    else {
        $dw = "Byts";	
    }
    return $size.$dw;
}


读文件
function   read($fileName) {
    $file = fopen($fileName,'r');
    flock($file,LOCK_SH);
    $con = fread($file,filesize($fileName));
    flock($file,LOCK_UN);
    fclose($file);
    return $con;
}


写文件
function write($fileName,$mess) {
    $file = fopen($fileName,'a');
    flock($file,LOCK_EX);
    fwrite($file,$mess);
    flock($file,LOCK_UN);
    fclose($file);
}


读取目录
$dir = opendir($dirName);
 while($fileName = readdir($dir)) {
    echo $fileName.'<br />';
 }
closedir($dir);




循环删除文件夹
function fnrmdir($dirName) {
    if(is_dir($dirName)) {
        $dir = opendir($dirName);
        while($fileName = readdir($dir)) {     
            if($fileName != '.' && $fileName != '..') {
                $file = $dirName.'/'.$fileName;
                if(is_dir($file)) {
                    fnrmdir($file);
                } else {
                    unlink($file);
                     echo  "删除".$file.'ok<br />';
                }
            }
        }
        closedir($dir);
        rmdir($dirName);
        echo  "删除".$dirName.'ok<br />';
    } else {
        return false;
    }
    return true;
}






复制文件夹
function  copydir($dirsrc,$newDir) {
    if(is_file($newDir)) {
        return "不是一个目录";
    } 
    if(!file_exists($newDir)) {
        mkdir($newDir);
    }
    $dir = opendir($dirsrc);
    while($fileName = readdir($dir)) {
        if($fileName != '.' && $fileName != '..') {
            $file1 = $dirsrc.'/'.$fileName;
            $file2 = $newDir.'/'.$fileName;
            if(is_dir($file1)) {
                copydir($file1,$file2);
            } else {
                copy($file1,$file2);
            }
        }
    }
    closedir($dir);
    return true;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值