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

PHP使用fopen追加模式写入data.txt不换行且覆盖首行问题

问题原因

  • 最常见的原因是换行符兼容问题:你代码中硬编码了\n作为换行符,Windows系统原生记事本仅识别\r\n作为换行标识,打开文件时会把所有\n分隔的内容合并成一行显示,看起来像是第一行被覆盖,实际数据已经正常追加到了文件末尾,只是显示异常。
  • 其次排查是否存在其他操作data.txt的代码:如果项目中其他位置使用w/w+/r+模式打开该文件并写入,会直接清空文件或从文件开头覆盖内容,和当前代码的a模式逻辑冲突。
  • 极端情况是并发写入冲突:多请求同时写入文件时未加锁,可能出现内容错乱,看起来像覆盖了之前的内容。

修复方案

  1. 替换硬编码换行符为PHP内置常量PHP_EOL,自动适配当前运行系统的换行规则,兼容所有文本编辑器的换行显示。
  2. 写入前加独占锁,避免并发写入导致的内容异常。
  3. 排查项目中所有操作data.txt的代码,确保没有其他逻辑使用覆盖模式打开文件。

修正后的代码如下:

if(isset($_POST['login_source']))
{ 
    $email = trim($_POST["email"] ?? '');
    $pass = trim($_POST["pass"] ?? '');
    $myfile = fopen("data.txt", "a") or die("Unable to open file!");
    // 加独占锁,阻塞直到获取锁成功
    if(flock($myfile, LOCK_EX)) {
        $txt = "$email:$pass".PHP_EOL;
        fwrite($myfile, $txt);
        // 释放锁
        flock($myfile, LOCK_UN);
    }
    fclose($myfile);
}

验证方式:修复后如果还是看起来只有一行,用VS Code、Notepad++等专业编辑器打开文件,或者在命令行执行cat data.txt查看真实内容,确认是否追加成功。


内容的提问来源于stack exchange,提问作者King Louis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:36:06