• PHP基础之文件操作


    文件操作

    文件类型

    • windows系统识别的文件类型

      • file
      • dir
      • unknown
    • filetype() 判断文件类型

      • 文件不存在,返回false
    <?php
    	$filename1= 'D:Program Filesxampphtdocsindex.php';
    	$filename2= 'D:Program Filesxampphtdocs';
    	$filename3= 'D:Program Filesxampphtdoc';
    	var_dump(filetype($filename1));
    	var_dump(filetype($filename2));
    	var_dump(filetype($filename3));
    ?>
    
    • file_exists() 判断文件是否存在
      • 文件存在,返回true
      • 文件不存在,返回false
    <?php
    	$filename1= 'D:Program Filesxampphtdocsindex.php';
    	$filename2= 'D:Program Filesxampphtdocs';
    	$filename3= 'D:Program Filesxampphtdoc';
    	var_dump(file_exists($filename1));
    	var_dump(file_exists($filename2));
    	var_dump(file_exists($filename3));
    ?>
    

    文件属性

    • 获取文件属性的函数
      • filesize 获取文件大小
      • filectime 获取文件的创建时间
      • filemtime 获取文件的修改时间
      • fileatime 获取文件的上次访问时间
      • is_readable 判断给定文件是否可读
      • is_writable 判断给定文件是否可写
      • is_executable 判断给定文件是否可执行
      • is_file 判断给定文件是否为一个正常的文件
      • is_dir 判断给定文件是否是一个目录
      • stat 给出文件的信息
    <?php
    	$filename= 'D:Program Filesxampphtdocsindex.php';
    	if(file_exists($filename)& is_file($filename)){
    		echo "文件大小为:".filesize($filename)."字节!<br>";
    		echo "文件的创建时间为:".date('Y年m月d日', filectime($filename))."<br>";
    		echo "文件的修改时间为:".date('Y年m月d日', filemtime($filename))."<br>";
    		echo "文件的访问时间为:".date('Y年m月d日', fileatime($filename))."<br>";
    		echo is_readable($filename)? "该文件可读<br>": "该文件不可读<br>";
    		echo is_writable($filename)? "该文件可写<br>": "该文件不可写<br>";
    		echo is_executable($filename)? "该文件可执行<br>": "该文件不可执行<br>";
    		echo "<pre>";
    		print_r(stat($filename));
    		echo "</pre>";
    	}else{
    		echo "该文件不存在!";
    	}
    ?>
    

    文件操作

    打开和关闭文件

    • fopen() 打开文件
    <?php
    	$downURL= 'http://rrh2.ufile.ucloud.com.cn/iXiaoma.rar';
    	$file1= fopen('D:Program Filesxampphtdocslogin.html', 'r');
    	$file2= fopen('D:Program Filesxampphtdocslogin.html', 'w');
    	$file3= fopen($downURL, 'r');
    	$file4= fopen('ftp://user:password@example.com/index.html', 'w');
    	echo "{$file1}<br>";
    	echo "{$file2}<br>";
    	echo "{$file3}<br>";
    	echo "{$file4}<br>";
    ?>
    
    • fclose() 关闭文件
      • 成功返回 true
      • 失败返回 false
    <?php
    	$file= fopen('D:Program Filesxampphtdocslogin.html', 'r');
    	echo "文件打开成功!<br>".$file."<br>";
    	if(fclose($file)){
    		echo "文件关闭成功!";
    	}
    ?>
    

    读取文件

    • fread() 用于在打开文件时读取指定长度的字符串
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	$file= fopen($filename, 'r');
    	$content= fread($file, 33);
    	echo "文件读取:{$content}<br>";
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    	# 读取全文
    	$file= fopen($filename, 'r');
    	$contentAll= fread($file, filesize($filename));
      echo "文件读取:{$contentAll}<br>";
      if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    
    • fgetc() 用于在打开的文件中读取一个字符
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	$file= fopen($filename, 'r');
    	$content= fgetc($file);
    	echo "文件读取:{$content}<br>";
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    
    • fgets() 用于在打开的文件中读取一行
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	$file= fopen($filename, 'r');
    	$content= fgets($file);
    	echo "文件读取:{$content}<br>";
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    
    • file_get_contents() 用于将文件的内容全部读取到一个字符串中
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	$content= file_get_contents($filename);
    	echo "文件读取:{$content}<br>";
    ?>
    
    • readfile() 用于将文件的内容全部输出到终端
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	readfile($filename);
    ?>
    
    • file() 将整个文件读入到数组中
    <?php
    	$filename= 'D:Program Filesxampphtdocserror_log.txt';
    	$content= file($filename);
    	foreach($content as $key=>$value){
    		echo "{$key} : {$value}<br>";
    	}
    ?>
    

    写入文件

    • fwrite() 用于写入文件
      • fopen($filename, 'w') 只写模式,文件清空重写
      • fopen($filename, 'a') 追加模式,文件追加续写
    <?php
    	$filename= 'D:Program Filesxampphtdocssunny_log.txt';
    	$content= "塔萌萌
    ";
    	$file= fopen($filename, 'a');
    	echo "文件打开成功!<br>";
    	fwrite($file, $content);
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    
    • file_put_contents() 用于对文件进行写操作
      • 不需要打开文件
      • 默认,文件清空重写
    <?php
    	$filename= 'D:Program Filesxampphtdocssunny_log.txt';
    	$content= "塔萌萌啊
    ";
    	file_put_contents($filename, $content, FILE_APPEND);
    	echo '文件写入成功';
    ?>
    

    文件加锁机制

    • flock() 实现文件加锁机制
      • LOCK_SH 取得共享锁定(读文件时使用)
      • LOCK_EX 取得独占锁定(写文件时使用)
      • LOCK_UN 释放锁定(无论共享与独占,都用它释放)
      • LOCK_NB 如果不希望 flock() 在锁定时堵塞,则给operation加上LOCK_NB
    <?php
    	$filename= 'D:Program Filesxampphtdocssunny_log.txt';
    	$content= "塔萌萌啊
    ";
    	$file= fopen($filename, 'w+');
    	if(flock($file, LOCK_EX)){
    		fwrite($file, $content);
    		flock($file, LOCK_UN);
    	}else{
    		echo "文件不能被锁定!";
    	}
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    

    二进制读取

    • fread() 实现二进制读取
      • 文件的存储有两种:字符流和二进制流
      • 二进制流的读取按文件大小来读的
    <?php
    	$path= 'D:Program Filesxampphtdocspig.jpg';
    	$file= fopen($path, 'r');
    	header('content-type:image/jpeg');
    	echo fread($file, filesize($path));
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    ?>
    
    • file_get_contents() 实现二进制读取
    <?php
    	$path= 'D:Program Filesxampphtdocspig.jpg';
    	header('content-type:image/jpeg');
    	echo file_get_contents($path);
    ?>
    

    复制文件

    • copy() 用于实现拷贝文件的功能
    <?php
    	$path= 'D:Program Filesxampphtdocspig.jpg';
    	$newPath= 'D:Program Filesxampphtdocsimgpig.jpg';
    	if(copy($path, $newPath)){
    		echo '拷贝成功';
    	}else{
    		echo '拷贝失败';
    	}
    ?>
    

    重命名文件

    • rename() 用于实现文件或目录的重命名功能
    <?php
    	$name= 'D:Program Filesxampphtdocspig.jpg';
    	$newName= 'D:Program Filesxampphtdocspiger.png';
    	$newPath= 'D:Program Filesxampphtdocsimgpigger.jpg';
    	rename($name, $newName);
    	echo '文件重命名成功'."<br>";
    	rename($newName, $newPath);
    	echo '文件重命名并指定新位置'."<br>";
    ?>
    

    删除文件

    • unlink() 其作用是删除文件
    <?php
    	$path= 'D:Program Filesxampphtdocsjerry.txt';
    	$file= fopen($path, 'a');
    	fwrite($file, "蜗萌
    ");
    	if(fclose($file)){
    		echo "文件关闭成功!<br>";
    	}
    	if(unlink($path)){
    		echo "文件删除成功!<br>";
    	}
    ?>
    

    目录操作

    解析目录

    • basename() 用于返回路径中的文件名
    <?php
    	$path= 'D:Program Filesxampphtdocssunny.txt';
    	$file1= basename($path);
    	echo $file1."<br>";
    	$file2= basename($path, '.txt');
    	echo $file2."<br>";
    ?>
    
    • dirname() 用于返回路径中的目录部分
    <?php
    	$path= 'D:Program Filesxampphtdocssunny.txt';
    	echo dirname($path);
    ?>
    
    • pathinfo() 用于以数组的形式返回路径的信息
    <?php
    	$path= 'D:Program Filesxampphtdocssunny.txt';
    	echo '<pre>';
    	print_r(pathinfo($path));
    	echo '</pre>';
    ?>
    

    遍历目录

    • opendir() 用于打开一个目录句柄
    <?php
    	$dir= 'D:Program Filesxampphtdocs';
    	echo opendir($dir);
    ?>
    
    • closedir() 用于关闭目录句柄

      • 没有返回值
    • readdir() 用于从目录句柄中读取条目

    <?php
    	$dir= 'D:Program Filesxampphtdocsimg';
    	if(is_dir($dir)){
    		if($dh= opendir($dir)){
    			while(($file= readdir($dh))!== false){
    				echo "filename:".$file."<br>";
    			}
    			closedir($dh);
    			echo "目录关闭成功!";
    		}
    	}
    ?>
    
    • rewindir() 用于倒回目录句柄

    创建和删除目录

    • mkdir() 用于新建目录
      • 用于新建目录
      • 单层目录创建于递归嵌套目录创建
    <?php
    	if(mkdir('D:Program Filesxampphtdocspath')){
    		echo '路径创建成功!';
    	};
    ?>
    
    • 创建说明
      • 0777表示是文件夹的权限,在Linux中会详细讲解
      • true表示递归创建,默认是false
    <?php
    	$path= 'D:Program Filesxampphtdocspath1path2';
    	if(mkdir($path, 0777, true)){
    		echo '路径创建成功!';
    	};
    ?>
    
    • rmdir() 用于删除目录
      • 删除的文件夹必须是空的
      • PHP基于安全考虑,没有提供递归删除。
    <?php
    	$path1= 'D:Program Filesxampphtdocspath';
    	$path2= 'D:Program Filesxampphtdocspath1path2';
    	if(rmdir($path1)){
    		echo '路径删除成功!';
    	}else{
    		echo '路径删除失败!';
    	}
    	if(rmdir($path2)){
    		echo '路径删除成功!';
    	}else{
    		echo '路径删除失败!';
    	}
    ?>
    

    统计目录中所有文件的大小

    <?php
    	function getDirSize($dirname){
    		$dirsize= 0;
    		$filePath= opendir($dirname);
    		while($filename= readdir($filePath)){
    			if($filename!= '.'& $filename!= '..'){
    				$file= $dirname.'/'.$filename;
    				if(is_dir($file)){
    					$dirsize+= getDirSize($file);
    				}else{
    					$dirsize+= filesize($file);
    				}
    			}
    		}
    		closedir($filePath);
    		return $dirsize;
    	}
    	$dirname= 'D:Program Filesxampphtdocs';
    	echo $dirname.'目录中文件的总大小为:'.getDirSize($dirname).'B';
    ?>
    

    其他目录操作

    • 重命名文件夹 rename(旧名字,新名字)
    <?php
      echo is_dir('./aaa')?'是文件夹':'不是文件夹';
    ?>
    
    • 打开文件夹、读取文件夹、关闭文件夹
      • opendir()返回资源类型
      • 每个文件夹中都有.和..
      • iconv()用来做字符编码转换
    <?php
      $folder=opendir('./');	//打开目录
      //var_dump($folder);		//resource(3) of type (stream) 
      while($f=readdir($folder)){	//读取文件夹
        if($f=='.' || $f=='..')
          continue;
        echo iconv('gbk','utf-8',$f),'<br>';  //将gbk转成utf-8
      }
      closedir($folder);		//关闭文件夹
    ?>
    

    查看磁盘大小或可用空间

    <?php
    	echo disk_total_space("d:")."<br>";
    	echo disk_free_space("d:");
    ?>
    
  • 相关阅读:
    202006leetcode刷题记录
    二分查找详解
    并查集
    202005leetcode刷题记录
    基于地震数据的Spark数据处理与分析
    Java日志框架:logback详解
    java 多线程
    Oracle表恢复(truncate)
    关于软件开发,你老板不知道的7件事
    调用oracle 分页存储过程 返回游标数据集
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14012883.html
Copyright © 2020-2023  润新知