# PHP文件读写:file_get_contents() 和 file_put_contents()详解
在PHP开发中,文件读写是最常见的基础操作之一。今天我们就来深入探讨PHP中两个非常实用的文件读写函数:`file_get_contents()`和`file_put_contents()`。
## 一、file_get_contents() - 读取文件内容
### 基本用法
`file_get_contents()`函数是读取文件内容到字符串的最简单方法:
```php
$content = file_get_contents('example.txt');
echo $content;
```
### 参数详解
函数原型:
```php
file_get_contents(string $filename, bool $use_include_path = false,
resource $context = null, int $offset = 0,
int $maxlen = null): string|false
```
- `$filename`:要读取的文件名
- `$use_include_path`:是否在include_path中查找文件
- `$context`:流上下文资源
- `$offset`:开始读取的偏移量
- `$maxlen`:最大读取长度
### 实用技巧
1. **读取远程URL**:
```php
$html = file_get_contents('https://www.example.com');
```
2. **设置超时**:
```php
$ctx = stream_context_create(['http' => ['timeout' => 5]]);
$content = file_get_contents('http://slow.site.com', false, $ctx);
```
3. **读取部分内容**:
```php
// 从第100字节开始读取200字节
$part = file_get_contents('largefile.bin', false, null, 100, 200);
```
## 二、file_put_contents() - 写入文件内容
### 基本用法
`file_put_contents()`是将字符串写入文件的最简单方法:
```php
$data = "Hello, World!";
file_put_contents('example.txt', $data);
```
### 参数详解
函数原型:
```php
file_put_contents(string $filename, mixed $data,
int $flags = 0, resource $context = null): int|false
```
- `$filename`:要写入的文件名
- `$data`:要写入的数据(可以是字符串、数组或流资源)
- `$flags`:写入标志(FILE_USE_INCLUDE_PATH、FILE_APPEND、LOCK_EX等)
- `$context`:流上下文资源
### 实用技巧
1. **追加内容**:
```php
file_put_contents('log.txt', "New log entry\n", FILE_APPEND);
```
2. **锁定文件**:
```php
// 写入时锁定文件防止并发写入
file_put_contents('counter.txt', $count, LOCK_EX);
```
3. **写入数组**:
```php
$lines = ['Line 1', 'Line 2', 'Line 3'];
file_put_contents('lines.txt', implode("\n", $lines));
```
## 三、性能与安全考虑
1. **大文件处理**:
- 对于超大文件,`file_get_contents()`会消耗大量内存
- 考虑使用`fopen()`和`fread()`等流式处理方式
2. **错误处理**:
```php
$content = @file_get_contents('nonexistent.txt');
if ($content === false) {
// 处理错误
echo "无法读取文件";
}
```
3. **安全考虑**:
- 永远不要直接使用用户输入作为文件名
- 验证文件路径和权限
## 四、实际应用示例
### 1. 简单的页面缓存
```php
function getPageContent($url) {
$cacheFile = md5($url) . '.cache';
if (file_exists($cacheFile) && time()-filemtime($cacheFile) < 3600) {
return file_get_contents($cacheFile);
}
$content = file_get_contents($url);
file_put_contents($cacheFile, $content);
return $content;
}
```
### 2. 配置文件读写
```php
// 读取JSON配置
$config = json_decode(file_get_contents('config.json'), true);
// 修改并保存
$config['last_update'] = time();
file_put_contents('config.json', json_encode($config, JSON_PRETTY_PRINT));
```
## 总结
`file_get_contents()`和`file_put_contents()`提供了PHP中最简单高效的文件读写方式,适用于大多数常见场景。掌握它们的使用技巧可以显著提高开发效率,但在处理大文件或需要精细控制时,应考虑更底层的文件操作函数。
希望这篇文章能帮助你更好地理解和使用这两个实用的PHP函数!如果你有任何问题或补充,欢迎在评论区留言讨论。