PHP文件操作 读取与写入

基本知识:


PHP文件系统是基于Unix系统的
文件数据基本类型:二进制数据、文本数据
文件输入流:数据从源文件到内存的流动
文件输出流:数据从内存保存到文件的流动

文件操作函数:

》》》读《《《


==>获取文件流
fopen(文件相对路径/绝对路径,[文件打开模式]);    成功返回文件流,否则返回false
    [文件打开模式]六种常用打开方式:

    r    只读方式打开    指针在文件头
    r+    读写方式打开    指针在文件头

    a    写入方式打开[追加]    指针在文件尾
    a+    读写方式打开[追加]    指针在文件尾

    w    写入方式打开[创建或清空]    指针在文件头
    w+    读写方式打开[创建或清空]    指针在文件头

    b     只限于windows,二进制模式,附加在其他模式的上,例如”xb”
    t     只限于windows,附加在其他模式上,,将所有行的结束符转换成

==>根据文件流获取文件信息
fstat(文件流);    返回文件信息
返回的数组部分信息:
['size']:文件大小
['atime']:最后访问时间   返回的是Unix时间戳 转换date('Y-m-d H:i:s',$fileStream['mtime']);
['mtime']:最后修改时间
['ctime']:最后改变时间(相当于创建时间,只要所有者或用户组没有变化)

==>关闭文件
fclose($fileStream);

==>根据路径获取文件信息(方法二):可以不用打开文件就可以获取文件信息
filesize($filePath);
fileatime($filePath);
filemtime($filePath);
filectime($filePath);

==>判断文件是否存在
file_exists($filePath);

==>读取文件内容(方法一)
$fileData = fread($fileStream,filesize($filePath));
注意:
文本文件读取到网页上显示时,由于换行符不被解释,文本不换行显示,
解决办法:将 替换为<br/>[str_replace(' ','<br/>',$fileData);]

==>读取文件内容(方法二)
file_get_contents($filePath); 将整个文件读取到一个字符串(内部自动关闭文件流)


==>读取文件内容(方法三) 循环读取,用于读取大文件
循环读取指定字节大小的文件数据
feof($fileStream):判断文件指针是否在文件未尾,是返回true,否则返回false
while(!feof($fileStream)){
    $fileData = fread($fileStream,1024);
    echo $fileData;
}

应用扩展:
编写配置文本文件 db.ini
内容:
    host=172.0.0.1
    uid=root
    pwd=1314
    dbname=test
parse_ini_file('db.ini'); 根据‘=’分隔后的一个数组


======================================

fopen('htttp://demo.php/','r');
可以读取远程文件,但只限于只读模式
成功返回文件流,否则返回false

fread($handle,$len);            读取文件的len个字符长度可
stream_get_contents($handle);     读取文件所有内容


fwrite(fileStream,rContent,[length])
Note: 在区分二进制文件和文本文件的系统上(如 Windows) 打开文件时,fopen() 函数的 mode 参数要加上 'b'。
成功返回写入的字符数,出现错误时则返回 FALSE 。


fclose(fileStream)


例:
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize ($filename));
fclose($handle);

ftruncate($hanle,$len); 截取文件内容

》》》写《《《

==>写入文件(方法一)
$fileStream = fopen(filePath,"a+"); 给文件末尾追加内容用a+
fwrite($fileStream,"要写入的内容");  返回写入的字符数,出现错误时则返回 FALSE 。

==>写入文件(方法二)
file_put_contents($filePath,"要写入的内容",FILE_APPEND);
内部会自动关闭文件流,FILE_APPEND以追加方式添加,如果没有则默认是对内容清空再写入
如果是循环写入,效率没有第一种高

》》》拷贝《《《
copy(源路径,结果路径);
注意:中文的编码转换 iconv('utf-8','gb2312',$filePath);

原文地址:https://www.cnblogs.com/lt-style/p/3511469.html