设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 85|回复: 12

一文带你掌握PHP中常见的文件操作

[复制链接]

1

主题

67

回帖

157

积分

注册会员

积分
157
发表于 2024-4-20 08:20:19 | 显示全部楼层 |阅读模式
目录


一、文件读取的5种方法

1、file_get_contents: 将整个文件读入一个字符串
  1. file_get_contents(string $filename,bool $use_include_path = false,?resource $context = null,int $offset = 0,?int $length = null): string|false
复制代码
可以读取本地的文件
也可以用来打开一个网络地址实现简单的网页抓取
可以模拟post请求(stream_context_create)
  1. $fileName = 'test.txt';
  2. if (file_exists($fileName)) {
  3.     $str = file_get_contents($fileName);
  4.     echo $str;
  5. } else {
  6.     print_r("文件不存在");
  7. }
复制代码
2、file: 把整个文件读入一个数组中
  1. file(string $filename, int $flags = 0, ?resource $context = null): array|false
复制代码
数组的每个元素对应于文件中的一行
可以读取本地的文件
也可以用来读取一个网络文件
  1. $lines = file('test.txt');
  2. foreach ($lines as $line_num => $line) {
  3.     echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
  4. }
复制代码
3、file_open、file_gets、file_read、fclose: 从文件指针资源读取
3.1 fgets — 从文件指针中读取一行
  1. fgets(resource $stream, ?int $length = null): string|false
复制代码
从文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
  1. $fp = fopen("test.txt", "r");
  2. if ($fp) {
  3.     while (!feof($fp)) {
  4.         $line = fgets($fp);
  5.         echo $line . "<br />\n";
  6.     }
  7.     fclose($fp);
  8. }
复制代码
3.2 fread — 从文件指针中读取固定长度(可安全用于二进制文件)
  1. fread(resource $stream, int $length): string|false
复制代码
  1. $fp = fopen("test.txt", "r");
  2. if ($fp) {
  3.     $content = "";
  4.     while (!feof($fp)) {
  5.         $content .= fread($fp, 1024);
  6.     }
  7.     #$contents = fread($handle, filesize($filename));
  8.     echo $content;
  9.     fclose($fp);
  10. }
复制代码
4、SplFileObject 类
https://www.php.net/manual/zh/class.splfileobject.php
5、调用linux命令
处理超大文件,比如日志文件时,可以用fseek函数定位,也可以调用linux命令处理
  1. $file = 'access.log';
  2. $file = escapeshellarg($file); // 对命令行参数进行安全转义
  3. $line = `tail -n 1 $file`;
  4. echo $line;
复制代码
二、文件写入

1、file_put_contents: 将数据写入文件
  1. file_put_contents(string $filename,mixed $data,int $flags = 0,?resource $context = null): int|false
复制代码
  1. $content = "Hello, world!"; // 要写入文件的内容
  2. $file = "test.txt"; // 文件路径

  3. file_put_contents($file, $content);
复制代码
2、fwrite: 写入文件(可安全用于二进制文件)
  1. fwrite(resource $stream, string $data, ?int $length = null): int|false
复制代码
  1. $content = "这是要写入文件的内容";
  2. $file = fopen("test.txt", "w"); // 打开文件写入模式
  3. if ($file) {
  4.     fwrite($file, $content); // 将内容写入文件
  5.     fclose($file); // 关闭文件
  6. }
复制代码
3、SplFileObject 类

三、文件复制、删除、重命名

1、copy: 拷贝文件
  1. copy(string $from, string $to, ?resource $context = null): bool
复制代码
  1. $file = 'test.txt';
  2. $newFile = 'test2.txt';

  3. if (!copy($file, $newFile)) {
  4.     echo "failed to copy $file...\n";
  5. }
复制代码
2、unlink: 删除文件
  1. unlink(string $filename, ?resource $context = null): bool
复制代码
  1. $fileName = 'test2.txt';
  2. if (file_exists($fileName)) {
  3.    if (unlink($fileName)) {
  4.        echo '删除成功';
  5.    }
  6. }
复制代码
3、rename: 重命名文件
  1. rename(string $from, string $to, ?resource $context = null): bool
复制代码
可以在不同目录间移动
如果重命名文件时 to 已经存在,将会覆盖掉它
如果重命名文件夹时 to 已经存在,本函数将导致一个警告
  1. $fileName = 'test.txt';
  2. $rename = 'test_new.txt';
  3. if (file_exists($fileName)) {
  4.    if (rename($fileName, $rename )) {
  5.        echo '重命名成功';
  6.    }
  7. }
复制代码
到此这篇关于一文带你掌握PHP中常见的文件操作的文章就介绍到这了,更多相关PHP文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:18
  • 最近打卡:2024-04-21 14:59:46

1

主题

58

回帖

153

积分

注册会员

积分
153
发表于 2024-4-24 07:11:17 | 显示全部楼层
看了LZ的帖子,我只想说一句很好很强大!

3

主题

54

回帖

176

积分

注册会员

积分
176
发表于 2024-4-24 12:32:19 | 显示全部楼层
同意你的观点,我们有共鸣。

1

主题

52

回帖

125

积分

注册会员

积分
125
发表于 2024-5-8 00:47:09 | 显示全部楼层
6666666666

2

主题

37

回帖

119

积分

注册会员

积分
119
发表于 2024-5-13 12:27:56 | 显示全部楼层
感谢分享,受益匪浅!

1

主题

40

回帖

104

积分

注册会员

积分
104
发表于 2024-5-29 04:14:17 | 显示全部楼层
我不确定这个信息的准确性,请再确认一下

0

主题

61

回帖

123

积分

注册会员

积分
123
发表于 2024-6-12 08:16:26 | 显示全部楼层
牛逼

1

主题

43

回帖

109

积分

注册会员

积分
109
发表于 2024-6-25 17:48:13 | 显示全部楼层
同意!

0

主题

51

回帖

103

积分

注册会员

积分
103
发表于 2024-8-9 23:04:36 | 显示全部楼层
能给个链接吗?我想深入了解一下。

1

主题

40

回帖

104

积分

注册会员

积分
104
发表于 2024-8-10 03:01:58 | 显示全部楼层
嘎嘎嘎嘎嘎嘎嘎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-15 11:49 , Processed in 0.104904 second(s), 26 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表