一、文件读取的5种方法
1、file_get_contents: 将整个文件读入一个字符串
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 2 3 4 5 6 7 | $fileName = 'test.txt' ; if ( file_exists ( $fileName )) { $str = file_get_contents ( $fileName ); echo $str ; } else { print_r( "文件不存在" ); } |
2、file: 把整个文件读入一个数组中
file(string $filename, int $flags = 0, ?resource $context = null): array|false
数组的每个元素对应于文件中的一行
可以读取本地的文件
也可以用来读取一个网络文件
1 2 3 4 | $lines = file( 'test.txt' ); foreach ( $lines as $line_num => $line ) { echo "Line #<b>{$line_num}</b> : " . htmlspecialchars( $line ) . "<br>n" ; } |
3、file_open、file_gets、file_read、fclose: 从文件指针资源读取
3.1 fgets — 从文件指针中读取一行
fgets(resource $stream, ?int $length = null): string|false
从文件中读取一行并返回长度最多为 length – 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length – 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
1 2 3 4 5 6 7 8 | $fp = fopen ( "test.txt" , "r" ); if ( $fp ) { while (! feof ( $fp )) { $line = fgets ( $fp ); echo $line . "<br>n" ; } fclose( $fp ); } |
3.2 fread — 从文件指针中读取固定长度(可安全用于二进制文件)
fread(resource $stream, int $length): string|false
1 2 3 4 5 6 7 8 9 10 | $fp = fopen ( "test.txt" , "r" ); if ( $fp ) { $content = "" ; while (! feof ( $fp )) { $content .= fread ( $fp , 1024); } # $contents = fread ( $handle , filesize ( $filename )); echo $content ; fclose( $fp ); } |
4、SplFileObject 类
https://www.php.net/manual/zh/class.splfileobject.php
5、调用linux命令
处理超大文件,比如日志文件时,可以用fseek函数定位,也可以调用linux命令处理
1 2 3 4 | $file = 'access.log' ; $file = escapeshellarg ( $file ); // 对命令行参数进行安全转义 $line = `tail -n 1 $file `; echo $line ; |
二、文件写入
1、file_put_contents: 将数据写入文件
file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
?resource $context = null
): int|false
1 2 3 4 | $content = "Hello, world!" ; // 要写入文件的内容 $file = "test.txt" ; // 文件路径 file_put_contents ( $file , $content ); |
2、fwrite: 写入文件(可安全用于二进制文件)
fwrite(resource $stream, string $data, ?int $length = null): int|false
1 2 3 4 5 6 | $content = "这是要写入文件的内容" ; $file = fopen ( "test.txt" , "w" ); // 打开文件写入模式 if ( $file ) { fwrite( $file , $content ); // 将内容写入文件 fclose( $file ); // 关闭文件 } |
3、SplFileObject 类
三、文件复制、删除、重命名
1、copy: 拷贝文件
copy(string $from, string $to, ?resource $context = null): bool
1 2 3 4 5 6 | $file = 'test.txt' ; $newFile = 'test2.txt' ; if (! copy ( $file , $newFile )) { echo "failed to copy $file...n" ; } |
2、unlink: 删除文件
unlink(string $filename, ?resource $context = null): bool
1 2 3 4 5 6 | $fileName = 'test2.txt' ; if ( file_exists ( $fileName )) { if (unlink( $fileName )) { echo '删除成功' ; } } |
3、rename: 重命名文件
rename(string $from, string $to, ?resource $context = null): bool
可以在不同目录间移动
如果重命名文件时 to 已经存在,将会覆盖掉它
如果重命名文件夹时 to 已经存在,本函数将导致一个警告
1 2 3 4 5 6 7 | $fileName = 'test.txt' ; $rename = 'test_new.txt' ; if ( file_exists ( $fileName )) { if (rename( $fileName , $rename )) { echo '重命名成功' ; } } |
到此这篇关于一文带你掌握PHP中常见的文件操作的文章就介绍到这了,更多相关PHP文件操作内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!