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

使用PHP保存textarea内容为TXT文件,文件生成但无内容写入如何解决

问题原因

  • 核心错误:你通过<a>标签的href跳转触发保存逻辑,<a>跳转属于GET请求,不会携带表单的POST提交数据,因此$_POST['content']始终为空,写入文件自然没有内容。
  • 语法错误:表单HTML结构存在冗余的</a>闭合标签,会导致浏览器解析表单结构异常。
  • 安全漏洞:未对$_POST['content']做存在性校验和安全过滤,直接拼接进JS代码和写入文件,存在XSS注入风险。

修复方案

推荐用原生表单submit按钮提交,无需额外JS代码,兼容性最好,修正后的完整代码如下:

<form method="POST" action="?SubmitFile=true">
  <div data-label="Index.php" class="demo-code-preview" contentEditable="true">
    <pre><code class="language-html">
      <textarea name="content">
<?php
$file = "index.php";
echo htmlspecialchars(file_get_contents($file));
?>
      </textarea>
    </code></pre>
  </div>
  <button type="submit" class="bar-anchor" name="SaveFile">
    <span>Save</span>
    <div class="transition-bar"></div>
  </button>
</form>

<?php
if (isset($_GET['SubmitFile']) && isset($_POST['content'])) {
    $content = $_POST['content'];
    // 输出到控制台前转义特殊字符避免JS报错
    echo "<script>console.log('" . addslashes($content) . "' );</script>";
    $file = "myfile.txt";
    $Saved_File = fopen($file, 'a+');
    fwrite($Saved_File, $content);
    fclose($Saved_File);
}
?>

如果要保留原有的<a>标签样式,需要给a标签添加点击触发表单提交的JS逻辑,修改a标签部分代码为:

<a href="javascript:;" class="bar-anchor" name="SaveFile" onclick="this.parentElement.submit()">
  <span>Save</span>
  <div class="transition-bar"></div>
</a>

注意要把action="?SubmitFile=true"加到form标签的属性里,才能正常触发后续的保存逻辑。

内容的提问来源于stack exchange,提问作者Gowri Lakshmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:45:04