8.文件操作

1.文件介绍

我们会点鼠标右键删除文件、会control+c(或右键)复制、粘贴文件,会新建一些文件,检测这个文件是不是只

读文件。在电脑里面进行的这些操作,在代码里面如果能操作就好了。因为,如果有了这些操作。我们能做很多事

情了:可不可以写入修改配置文件、是不是可以做PHP安装的时候检测文件的权限、是不是可以做生成Html文件

等等很多不同的操作,总之其他太多太多的地方用到了文件操作。

2.简单的读取文件

2.1readfile函数

readfile( "文件路径" )会直接将文件内容打印在控制台

<?php
	readfile('test.txt')
?>

image-20201127175026205

2.2file_get_content函数

<?php
   $filename = 'test.txt';
   $filestring = file_get_contents($filename); //打开文件把内容读出来,赋值$filestring
   echo $filest
ring;
?>

3.文件操作三步骤

3.1fopen打开文件

当你用fopen打开一个文件之前,应该先指定好模式

常见模式 :

  • r模式 只读
  • w模式 只写
  • a模式 追加模式

fopen的8种模式

模式 描述
r 只读。在文件的开头开始。
r+ 读/写。在文件的开头开始。
w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。
a+ 读/追加。通过向文件末尾写内容,来保持文件内容。
x 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

如果 fopen() 函数无法打开指定文件,则返回 0 (false)。

<?php
	$fp = fopen('test.txt','r');
	echo var_dump($fp);
	// resource(5) of type (stream)

	$fp = fopen('test1.txt','r');
	echo var_dump($fp);
	// bool(false)
?>

3.2读操作

逐行读取文件

gets() 函数用于从文件中逐行读取文件。

注释:在调用该函数之后,文件指针会移动到下一行。

<?php
	$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
	// 读取文件每一行,直到文件结尾
	while(!feof($file))
        // feof($file)判断文件指针是否在文件末尾
	{
    	echo fgets($file);   // 读取文件内容,自动换行
	}
	fclose($file);
?>

逐字符读取文件

fgetc() 函数用于从文件中逐字符地读取文件。

注释:在调用该函数之后,文件指针会移动到下一个字符。

<?php
	$file=fopen("text.txt","r");
	while (!feof($file))
	{
  		echo fgetc($file);
	}
	fclose($file);
?>

3.3写操作

注意 : 想要向文件中写入内容,必须先指定模式为w

<?php
   $filename = 'test.txt';
   $fp= fopen($filename, "w");
   $len = fwrite($fp, '我是一只来自南方的狼,却在北方冻成了狗');
   fclose($fp);
   print $len .'字节被写入了\n';
?>
    
// 代码说明:
// 不论有没有新建都会打开文件重新写入
// 原有的文件内容会被覆盖掉
// 文件不存在会创建

3.4关闭文件

因为计算机不会像人类那么聪明,你不告诉他关闭文件,它是不会自己关闭文件的,所以当你打开文件,然后操作

完成后 ,一定要注意要关闭文件。

<?php

$fp = fopen('test.txt','w');    
fwrite($fp,'晚上吃什么?');
fclose($fp);
    
?>    

4.php 创建临时文件

我们之前创建的文件都是永久文件,而创建临时文件在我们平时的项目开发中也非常有用,创建临时文件的好处:

文件操作完成后即删除,不需要去维护这个文件的删除状态。

<?php
   //创建了一个临时文件
   $handle = tmpfile();
   //向里面写入了数据
   $numbytes = fwrite($handle, '写入临时文件');
   //关闭临时文件,文件即被删除
   fclose($handle);
   echo  '向临时文件中写入了'.$numbytes . '个字节';
?>

5.其他文件操作

5.1重命名文件

rename($旧名,$新名)

功能:这个函数返回一个bool值,将旧的名字改为新的名字。

<?php   //旧文件名   $filename = 'test.txt';   //新文件名   $filename2 = 'new_test.txt';   //重名名文件   rename($filename, $filename2);?>

5.2复制文件

复制文件,就相当于是克隆技术,将一个原来的东西再克隆成一个新的东西,两个长得一模一样。

copy(源文件,目标文件)

功能:将指定路径的源文件,复制一份到目标文件的位置。

<?php   //旧文件   $filename = 'demo.txt';   //新文件   $filename2 = 'demo_copy.txt';   //复制文件   copy($filename, $filename2);?>说明:会通过上面的例子,发现多出来了一个文件。

5.3删除文件

删除文件就是将指定路径的一个文件删除,不过这个删除是直接删除。使用的是windows电脑,你在回收站看不

到这个文件,你只会发现这个文件被删除了。

unlink(指定路径的文件) 返回一个bool值

<?php   $filename = 'test.txt';   if (unlink($filename)) {       echo  "删除文件成功 $filename!\n";   } else {       echo  "删除 $filename 失败!\n";   }?>

5.4检测文件属性函数

常用文件属性函数:

序号 函数信息 说明
1 file_exists( $指定文件名或者文件路径) 文件是否存在。
2 is_readable ( $指定文件名或者文件路径) 文件是否可读
3 is_writeable ( $指定文件名或者文件路径) 文件是否可写
4 is_executable ( $指定文件名或者文件路径) 文件是否可执行
5 is_file ( $指定文件名或者文件路径) 是否是文件
6 is_dir ( $指定文件名或者文件路径) 是否是目录
7 void clearstatcache ( void ) 清楚文件的状态缓存
<?php	$filename = 'test.txt';	echo var_dump(file_exists($filename))   // 返回bool值?>

6.目录处理函数

php 目录处理函数处理文件夹的基本思想如下:

  • 读取某个路径的时候判断是否是文件夹

  • 是文件夹的话,打开指定文件夹,返回文件目录的资源变量

  • 使用readdir读取一次目录中的文件,目录指针向后偏移一次

  • 使用readdir读取到最后,没有可读的文件返回false

  • 关闭文件目录

我们来学习一下常用函数

序号 函数信息 说明
1 opendir 打开文件夹,返回操作资源
2 readdir 读取文件夹资源
3 is_dir 判断是否是文件夹
4 closedir 关闭文件夹操作资源
5 filetype 显示是文件夹还是文件,文件显示file,文件夹显示dir
<?php//设置打开的目录是D盘$dir = "d:/";//判断是否是文件夹,是文件夹if (is_dir($dir)) {   if ($dh = opendir($dir)) {      //读取到最后返回false,停止循环      while (($file = readdir($dh)) !== false) {           echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";       }       closedir($dh);   }}?>
序号 函数 说明
1 pathinfo 返回文件的各个组成部分
2 basename 返回文件名
3 dirname 文件目录部份
<?php	$path_parts = pathinfo('d:/www/index.php');	echo '文件目录名:'.$path_parts['dirname']."<br />";	echo '文件全名:'.$path_parts['basename']."<br />";	echo '文件扩展名:'.$path_parts['extension']."<br />";	echo '不包含扩展的文件名:'.$path_parts['filename']."<br />"; ?>

7.php实现文件留言本

index.php

<?php//设置时区date_default_timezone_set('PRC');//读了内容@$string = file_get_contents('message.txt');//如果$string 不为空的时候执行,也就是message.txt中有留言数据if (!empty($string)) {    //每一段留言有一个分格符,但是最后多出了一个&^。因此,我们要将&^删掉    $string = rtrim($string, '&^');    //以&^切成数组    $arr = explode('&^', $string);    //将留言内容读取    foreach ($arr as $value) {        //将用户名和内容分开        list($username, $content, $time) = explode('$#', $value);        echo '用户名为<font color="gree">' . $username . '</font>内容为<font color="red">' . $content . '</font>时间为' . date('Y-m-d H:i:s', $time);        echo '<hr />';    }}?><h1>基于文件的留言本演示</h1><form action="write.php" method="post">    用户名:<input type="text" name="username" /><br />    留言内容:<textarea  name="content"></textarea><br />    <input type="submit" value="提交" /></form>

write.php

<?php//追加方式打开文件$fp=fopen('message.txt','a');//设置时间$time=time();//得到用户名$username=trim($_POST['username']);//得到内容$content=trim($_POST['content']);//组合写入的字符串:内容和用户之间分开,使用$#//行与行之间分开,使用&^$string=$username.'$#'.$content.'$#'.$time.'&^';//写入文件fwrite($fp,$string);//关闭文件fclose($fp);header('location:index.php');?>
原文地址:https://www.cnblogs.com/xcymn/p/15721333.html