zoukankan      html  css  js  c++  java
  • PHP对文件的操作方法

    php对文件的操作方法:

    <?php
    header("Content-type: text/html; charset=utf-8");
    /********************
    1、写入内容到文件,追加内容到文件
    2、打开并读取文件内容
    ********************/
     $file  = 'log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个
     $content = "第一次写入的内容
    ";
     
     if($f  = file_put_contents($file, $content,FILE_APPEND)){// 这个函数支持版本(PHP 5) 
      echo "写入成功。<br />";
     }
     $content = "第二次写入的内容";
     if($f  = file_put_contents($file, $content,FILE_APPEND)){// 这个函数支持版本(PHP 5)
         echo "写入成功。<br />";
     }
     if($data = file_get_contents($file)){; // 这个函数支持版本(PHP 4 >= 4.3.0, PHP 5) 
      echo "写入文件的内容是:$data";
     }
    ?>

    注意:log.txt 这个文件web服务器用户一定要有读写权限(nginx下是nginx用户,apache下默认用户是daemon),一般需要把这个文件设置为777属性。

    php file_put_contents 追加数据
    int file_put_contents( string filename, string data [, int flags [, resource context]] )   
    和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。   
    filename 要被写入数据的文件名。
    data 要写入的数据。类型可以是 string,array (但不能为多维数组)或者是 stream 资源。
    flags flags 可以是 FILE_USE_INCLUDE_PATH,FILE_APPEND 和/或 LOCK_EX(获得一个独占锁定),使用FILE_USE_INCLUDE_PATH 时要特别谨慎。   
    context 一个 context 资源。
    该函数将返回写入到文件内数据的字节数。
    file_put_contents("rote.txt","cc ",FILE_APPEND);
    ‍第三个参数实现将内容追加到文件的后面,如果没有这个参数会直接覆盖以前的数据。


    常用日志的保存方法:

    /**
     * ******************
     * 1、写入内容到文件,追加内容到文件
     * 2、打开并读取文件内容
     * *******************
     */
    function save_log($path, $msg)
    {
        if (! is_dir($path)) {
            mkdir($path);
        }
        $filename = $path . '/' . date('YmdHi') . '.txt';
        $content = date("Y-m-d H:i:s")."
    ".$msg."
     
     
     ";
        file_put_contents($filename, $content, FILE_APPEND);
    }
    save_log('./log', '日志内容字符串');

    或者:

    /**
     * 日志保存函数
     * 这里我是按照每周一生成一个新的文件,
     * 每一个操作类型分为一个文件夹,
     * 存的文件扩展名为 .json
     * @param string 文件路径
     * @param string 文件类型
     *
    */
    
    function save_log($path,$fileType,$operationName){
    
       $date=new DateTime();
       $date->modify('this week');
       $first_day=$date->format('Y-m-d');//获取每周一的日期
    
       $now = date("Y-m-d H:i:s");//操作日期
       $IP = $_SERVER['REMOTE_ADDR'];//操作的Ip
       $user = session('admin_name');//操作的用户
    
       $str = "{"dateTime":"".$now."","IP":"".$IP."","user":"".$user.""},".PHP_EOL;//PHP_EOL 满足windowslinuxMAC环境下的换行
    
       $pathName = $path."/".$fileType."/".$first_day.".json";//完整路径名
    
       file_put_contents($pathName,$str,FILE_APPEND);//FILE_APPEND 不删除原来文件的情况下插入内容
    
    }

    逐行读取文件中的内容:

    <?php
    $c = getLine('./a.txt', 10); // 读取a.txt文件第10行内容
    echo $c;
    /**
     * 获取指定行内容
     *
     * @param $file 文件路径
     * @param $line 行数
     * @param $length 指定行返回内容长度
     */
    function getLine($file$line$length = 4096){
        $returnTxt = null; // 初始化返回
        $i = 1; // 行数
     
        $handle = @fopen($file"r");
        if ($handle) {
            while (!feof($handle)) {
                $buffer fgets($handle$length);
                if($line == $i$returnTxt $buffer;
                $i++;
            }
            fclose($handle);
        }
        return $returnTxt;
    }

    或者:

    假设有user.txt文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12  
    user01                                                                                        
    user02
    user03
    user04
    user05
    user06
    user07
    user08
    user09
    user10
    user11
    user12

    逐行读取user.txt并写入数组的方法如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12  
    $file = fopen("username.txt", "r");
    $user=array();
    $i=0;
    //输出文本中所有的行,直到文件结束为止。
    while(! feof($file))
    {
     $user[$i]= fgets($file);//fgets()函数从文件指针中读取一行                                    
     $i++;
    }
    fclose($file);
    $user=array_filter($user);
    print_r($user);



  • 相关阅读:
    Spring面试,IoC和AOP的理解
    WEB打印(jsp版)
    Spring事务管理机制的实现原理-动态代理
    spring面试题
    oracle PLSQL基础学习
    oracle创建表空间
    WM_CONCAT字符超过4000的处理办法
    Oracle 数据泵使用详解
    Oracle 数据泵详解
    linux下启动oracle
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126480.html
Copyright © 2011-2022 走看看