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:");
?>
原文地址:https://www.cnblogs.com/SharkJiao/p/14012883.html