PHP循环读取文件时字符串追加失效仅保留最后内容如何解决?
问题原因
file()函数默认会保留每行末尾的换行符,所以你从order.txt读取到的每个文件名实际都带有换行符(比如"one.txt\n")。file_get_contents找不到带换行符的文件,会返回false,而字符串拼接时false会被转为空字符串,导致前面文件的内容都没被追加。如果order.txt的最后一行没有换行符,就能正确读取该文件,最终变量就只剩最后一个文件的内容。
解决方法
有两种简单的修复方式:
方式一:读取每行时修剪空白字符
在循环里用trim()去掉文件名的换行符和首尾空白:
$order = file("order.txt"); $content = ""; foreach($order as $line) { $filename = trim($line); // 可选:增加文件存在检查,避免报错 if (file_exists($filename)) { $content .= file_get_contents($filename); } } return $content;
方式二:读取文件时直接忽略换行符
使用file()函数的FILE_IGNORE_NEW_LINES参数,读取时自动去掉每行的换行符:
$order = file("order.txt", FILE_IGNORE_NEW_LINES); $content = ""; foreach($order as $filename) { if (file_exists($filename)) { $content .= file_get_contents($filename); } } return $content;
内容的提问来源于stack exchange,提问作者CoopDaddio
相关产品推荐
相关产品推荐

