php 文件操作

文件操作

1.打开文件

fopen — 打开文件或者 URL
resource fopen( string $filename, string $mode[, bool $use_include_path = false[, resource $context]] )
fopen() 将 filename 指定的名字资源绑定到一个流上。
$filenamee 打开文件路径
$mode 参数指定了所要求到该流的访问类型(读写)
参数 注解
'r' 只读方式打开,将文件指针指向文件头
'r+' 读写方式打开,将文件指针指向文件头
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
'a+' 读写方式打开,将文件指针指向文件头

Note:

为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记
例如:fopen ($file , "ab");

2.string fread( resource $handle, int $length)


  fread — 读取文件(可安全用于二进制文件)
  $handle 文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
 $length 最多读取 length 个字节

3.string fgets( resource $handle[, int $length] )

从文件指针中读取一行。
 
handle 文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。

length
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

4.string fgetc( resource $handle)

从文件句柄中获取一个字符。

<?php
$fp = fopen('somefile.txt', 'r');
if (!$fp) {
    echo '文件打开失败';
    exit;
}
while (false !== ($char = fgetc($fp))) {
    echo "$char\n";
}

fclose($handle);
?>

5.文件写入数据

fwrite ($handle,$str,[$length])
$str        写入的字符串

$lenght         写入多少个字节
        

6.其他文件方法

fclose()                    关闭文件

file_get_contents()         获取文件内容

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

is_file()                   判断给定文件是否为一个正常的文件

filsesize()                 取得文件大小

filetype()                  文件类型

file_exists()               检查文件或目录是否存在

unlink()                    删除文件函数

file()                      把整个文件读入一个数组中

fileatime($file_path)       获取文件上次访问时间

filemtime($file_path)       获取文件上次内容被修改的时间

is_readable()               判断给定文件名是否可读

is_writable()               判断给定的文件名是否可写


7.例子

<?php

/*
    	文件路径可以是
    		1.相对路径 $file = "./test.txt"
    		2.绝对路径 $file = "D:/wamp/www/php/file/test.txt"
    		3.url远程文件  "http://localhost/php/file/test.txt"
    	当远程文件打开,不能以写入的方式打开
        必须是远程存在的文件
        操作文件分为以下三步
    		1.打开文件
    		2.操作文件 (读 ,写等)
    		3.关闭文件
    	*/
      $filename = './test.txt';
      
      $file=fopen($filename,'ab');
      if(!$file){
          echo "打开文件失败";
          exit;
      }
      //写入文件
      $str="hello world!";
      if(fwrite($file,$str)){
        echo "写入文件成功";
      }
      //读取文件 fopen的打开方式应该是r或r+
      $file=fopen($filename,'rb');
      echo fread($file,filesize($filename));//hello world!
      //关闭文件
      fclose($file);

?>

目录操作

1 常用方法
is_dir() 判断是不是一个目录

mkdir() 新建目录(创建之前需要检测目录是否已经存在)

opendir() 打开目录,返回一个目录句柄

readdir() 从目录句柄中读取条目

scandir() 列出指定路径中的文件和目录(以数组形式返回)

getdir() 取得当前工作目录(当前脚本目录)

chdir() 改变目录

realpath() 转换为更直观的目录(以当前绝地路径显示出来)

closedir() 关闭目录句柄
2.例子

<?php
/**
 * 创建目录
 */
$dir="./a";
if(file_exists($dir)){
  echo "目录已存在";
  exit;
}
/**
 * bool mkdir( string $pathname[, int $mode = 0777[, bool $recursive = false[, resource $context]]] )
 *  pathname 目录的路径
 * 默认的 mode 是 0777,意味着最大可能的访问权
 * recursive 当创建包含子目录时必须为true
*/
if(mkdir($dir)){
echo "创建成功!";
};
// 打开文件
$opDir = opendir($dir);
// 输出目录
while (($fileName = readdir($opDir)) !== false) {
  echo $fileName."<br />";
}
// 关闭目录
closedir($opDir);
?>

例子:获取给定目录下所有.php文件

<?php
//获取给定下的所有.php文件
function getDir($path){
  //判断是否是目录
  if(is_dir($path)){
    // 列出指定路径中的文件和目录(以数组形式返回)
    $dir = scandir($path);
     foreach($dir as $val){
        $sub_path=$path .'/'.$val;
        if($val==="."|| $val===".."){
          continue;

        } else if(is_dir($sub_path)){
          echo '目录名:'.$val .'<br/>';
          getDir($sub_path);
        }else {
           //.$path 可以省略,直接输出文件名
           if(preg_match("/\.php$/i",$val)){
            echo ' 文件:'.$path.'/'.$val.' <hr/>';
           }
        
        }
     }


  }
}

$path="../file";
getDir($path);
posted @ 2020-03-23 12:31  素衣居士  阅读(220)  评论(0编辑  收藏  举报