You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP遍历文本文件并按每行内容动态创建对应文件?

解决PHP遍历文件创建对应txt文件的问题

我来帮你排查下问题哈~你的代码里有几个关键问题导致只生成了最后一个文件:

  • 重复调用fgets():你在循环里先echo fgets($file),然后又$fileName = fgets($file),这意味着每次循环会读取两行内容——第一行用来输出,第二行用来创建文件,这样直接跳过了一半的行,最后自然只处理到了最后一行。
  • 语法错误:fopen($fileName.'.txt, "w")这里的引号没闭合正确,应该是fopen($fileName . '.txt', "w"),少了一个双引号的闭合,这会导致代码报错(只是可能你没看到错误提示)。
  • 未处理换行符:fgets()会把每行末尾的换行符(\n或者\r\n)也读进来,直接用来当文件名的话,会创建出带换行的奇怪文件名,比如red\n.txt,这显然不是你想要的。

修正后的代码

<?php 
// 打开files.txt文件
$file = fopen("files.txt", "r");
if ($file) {
    // 循环读取每一行,直到文件结束
    while (($line = fgets($file)) !== false) {
        // 去除换行符和首尾空白字符(空格、制表符等)
        $fileName = trim($line);
        // 跳过空行,避免创建无效文件名的文件
        if (empty($fileName)) {
            continue;
        }
        // 输出当前处理的文件名
        echo $fileName . "<br />";
        // 创建对应的xxx.txt文件,注意引号的正确闭合
        $myfile = fopen($fileName . '.txt', "w");
        // 关闭创建的文件,释放资源
        fclose($myfile);
    }
    // 关闭源文件
    fclose($file); 
} else {
    // 处理文件打开失败的情况
    echo "无法打开files.txt文件,请检查文件路径和权限!";
}
?>

关键改进说明

  1. 单次读取每行内容:把fgets()的结果存入变量$line,避免重复读取导致的行跳过问题。
  2. 清理文件名:用trim()处理每行内容,确保文件名不含换行符和多余空白。
  3. 语法修复:修正了fopen函数里的引号闭合错误。
  4. 空行处理:增加空行判断,防止创建无效的空文件名文件。
  5. 错误处理:添加了文件打开失败的提示,方便排查问题。
  6. 资源释放:每次创建文件后调用fclose($myfile),养成良好的资源管理习惯。

内容的提问来源于stack exchange,提问作者Mona Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:30:27