PHP对文件的操作方法

时间:2022-11-03 21:57:40


php对文件的操作方法:

<?php
header("Content-type: text/html; charset=utf-8");
/********************
1、写入内容到文件,追加内容到文件
2、打开并读取文件内容
********************/
$file = 'log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个
$content = "第一次写入的内容\n";

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")."\r\n".$msg."\r\n \r\n \r\n ";
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 满足windows、linux、MAC环境下的换行

$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文件如下:

user01                                                                                               
user02
user03
user04
user05
user06
user07
user08
user09
user10
user11
user12


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

$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 );