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

如何在PHP的fwrite()函数中写入PHP代码?

问题根源

你遇到的核心问题是双引号字符串会被PHP自动解析内部变量,同时存在引号嵌套冲突的问题,导致代码提前执行或触发语法错误,无法原样写入目标文件。

解决方案

方案1:使用单引号包裹内容

单引号内的变量和特殊字符不会被PHP解析,只需转义字符串内部的单引号(用\')即可:

$fp = fopen('../blogs/' . $url . '.php', 'w');
fwrite($fp, '
  <p>This is a paragraph</p>
  <?php 
     $conn = mysqli_connect(\'server\', \'username\', \'password\', \'database\');
     if(!$conn){
        echo \'<h3 class="container bg-dark p-3 text-center text-warning rounded-lg mt-5">Not able to establish Database Connection</h3>\';
     }
     // Get data to display on index page
     $sql = \'SELECT * FROM blog WHERE id = $id\';
     $result = $conn->query($sql);
     while($row = $result->fetch_assoc()){
        $content = $row[\'content\'];
        echo $content;
     }
  ?>
');
fclose($fp);

方案2:使用NOWDOC语法(推荐)

NOWDOC是PHP专为大段纯文本设计的语法,用<<<'标识'开头、标识;结尾,内部内容完全原样输出,无需转义变量或引号:

$fp = fopen('../blogs/' . $url . '.php', 'w');
$phpCode = <<<'CODE'
  <p>This is a paragraph</p>
  <?php 
     $conn = mysqli_connect('server', 'username', 'password', 'database');
     if(!$conn){
        echo '<h3 class="container bg-dark p-3 text-center text-warning rounded-lg mt-5">Not able to establish Database Connection</h3>';
     }
     // Get data to display on index page
     $sql = 'SELECT * FROM blog WHERE id = $id';
     $result = $conn->query($sql);
     while($row = $result->fetch_assoc()){
        $content = $row['content'];
        echo $content;
     }
  ?>
CODE;
fwrite($fp, $phpCode);
fclose($fp);

方案3:转义双引号内的变量

如果坚持使用双引号,需给所有不想被解析的变量前添加\,同时处理引号嵌套冲突:

$fp = fopen('../blogs/' . $url . '.php', 'w');
fwrite($fp, "
  <p>This is a paragraph</p>
  <?php 
     \$conn = mysqli_connect('server', 'username', 'password', 'database');
     if(!\$conn){
        echo '<h3 class=\"container bg-dark p-3 text-center text-warning rounded-lg mt-5\">Not able to establish Database Connection</h3>';
     }
     // Get data to display on index page
     \$sql = 'SELECT * FROM blog WHERE id = \$id';
     \$result = \$conn->query(\$sql);
     while(\$row = \$result->fetch_assoc()){
        \$content = \$row['content'];
        echo \$content;
     }
  ?>
");
fclose($fp);

额外修复点

  • 原代码中$result_-&gt;fetch_assoc()多了下划线,已修正为$result->fetch_assoc()
  • 补充了未闭合的<h3>标签
  • 添加fclose($fp)确保文件句柄正常关闭,写入操作完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:27