
本文介绍如何使用 file_get_contents() 高效读取并合并多个文本文件内容到一个 php 字符串变量中,避免 fopen() 覆盖问题,并提供可扩展、健壮的实现方案。
本文介绍如何使用 file_get_contents() 高效读取并合并多个文本文件内容到一个 php 字符串变量中,避免 fopen() 覆盖问题,并提供可扩展、健壮的实现方案。
在 PHP 中,直接连续调用 fopen()(如原代码所示)会导致 $file 变量被反复覆盖,最终仅保留最后一个文件的资源句柄,既无法获取全部内容,也不便于后续处理。正确做法是读取文件内容而非句柄,并将结果拼接至同一字符串变量中。
推荐使用 file_get_contents() —— 它以字符串形式返回整个文件内容,简洁安全,无需手动管理文件指针或关闭资源:
$file = '';
if (in_array($sDate, ['2022-07-18', '2022-07-19', '2022-07-20', '2022-07-21', '2022-07-22'])) {
$file .= file_get_contents('files/bla1.exp');
$file .= file_get_contents('files/bla2.exp');
$file .= file_get_contents('files/bla3.exp');
}✅ 优势说明:
- file_get_contents() 自动处理编码与换行,返回原始字符串;
- 使用 .= 运算符高效追加内容,语义清晰;
- in_array() 替代冗长的 || 判断,提升可读性与可维护性。
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 确保目标文件存在且具有读取权限,否则会触发警告(可配合 @ 抑制或使用 file_exists() 预检);
- 大文件场景下需注意内存占用,若单个文件超几十 MB,建议改用流式读取(fopen + fgets);
- 如需保留文件间分隔(如换行),可在拼接时添加分隔符:$file .= file_get_contents(...) . "\n";
? 进阶建议(提升健壮性):
$file = '';
$dates = ['2022-07-18', '2022-07-19', '2022-07-20', '2022-07-21', '2022-07-22'];
$files = ['files/bla1.exp', 'files/bla2.exp', 'files/bla3.exp'];
if (in_array($sDate, $dates)) {
foreach ($files as $path) {
if (file_exists($path)) {
$file .= file_get_contents($path);
} else {
trigger_error("File not found: {$path}", E_USER_WARNING);
}
}
}该写法支持动态扩展文件列表,增强容错能力,是生产环境推荐的实践方式。



















