• 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');?>
    
  • 相关阅读:
    Using Resource File on DotNet
    C++/CLI VS CSharp
    JIT VS NGen
    [Tip: disable vc intellisense]VS2008 VC Intelisense issue
    UVa 10891 Game of Sum(经典博弈区间DP)
    UVa 10723 Cyborg Genes(LCS变种)
    UVa 607 Scheduling Lectures(简单DP)
    UVa 10401 Injured Queen Problem(简单DP)
    UVa 10313 Pay the Price(类似数字分解DP)
    UVa 10635 Prince and Princess(LCS N*logN)
  • 原文地址:https://www.cnblogs.com/xcymn/p/15721333.html
Copyright © 2020-2023  润新知