• 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');?>
    
  • 相关阅读:
    小程序自定义组件(3)子向父传参
    postgresql插件安装
    二进制减法的实现
    mysql锁表问题
    mysql查看修改参数
    众数问题-找出超过一半的数
    只出现一次的数
    元素最大间距离
    第一个缺失数字
    局部最小值位置
  • 原文地址:https://www.cnblogs.com/xcymn/p/15721333.html
Copyright © 2020-2023  润新知