PHP中能否打开多个文件并将所有内容合并存入$file变量
PHP多文件内容合并实现方案
你的需求完全可以实现。首先需要指出你原有代码的问题:
- 重复调用
fopen()给$file赋值时,会覆盖上一次的返回值(文件资源句柄),最终$file只会保留最后打开的bla3.exp的句柄,既拿不到前两个文件的内容,也没有完成内容读取的动作,和你的预期不符。
使用file_get_contents实现(推荐)
PHP中没有get_file_contents函数,正确的函数名是file_get_contents(),它可以直接将整个文件读取为字符串,不需要手动管理文件句柄,是实现这个需求最简洁的方案。
你原有的长串日期相等判断也可以优化为数组判断,代码可读性更高:
// 待匹配的日期列表 $validDates = ["2022-07-18", "2022-07-19", "2022-07-20", "2022-07-21", "2022-07-22"]; if (in_array($sDate, $validDates)) { $file = ""; // 按顺序拼接三个文件的内容 $file .= file_get_contents("files/bla1.exp"); $file .= file_get_contents("files/bla2.exp"); $file .= file_get_contents("files/bla3.exp"); }
执行完成后$file变量中存储的就是三个exp文件合并后的完整内容。如果需要避免文件不存在产生的警告,可以在每次读取前加file_exists()做路径校验。
基于fopen的实现方式
如果有特殊场景必须使用fopen操作,需要注意fopen返回的是资源句柄,需要配合fread()读取内容、fclose()关闭句柄,不能直接把句柄当做文件内容使用:
$validDates = ["2022-07-18", "2022-07-19", "2022-07-20", "2022-07-21", "2022-07-22"]; if (in_array($sDate, $validDates)) { $file = ""; $filePaths = ["files/bla1.exp", "files/bla2.exp", "files/bla3.exp"]; foreach ($filePaths as $path) { $handle = fopen($path, "r"); if ($handle) { // 按文件大小读取完整内容 $file .= fread($handle, filesize($path)); // 读取完成关闭文件句柄,释放资源 fclose($handle); } } }
日常使用优先选择file_get_contents()方案即可,代码量更少,不需要手动维护文件资源,性能没有明显差异。
内容的提问来源于stack exchange,提问作者mrdigitalis
相关产品推荐
相关产品推荐

