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

np8igboo  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(104)

如何在fwrite()中编写PHP-Code?

你好,在我的代码中,我想使用php创建一个新的.php文件:fwrite().我如何在fwrite()-函数中编写PHP。我以前的尝试以错误告终,因为PHP代码被执行,而不是“写”在创建的文件($fp)中。
这是我的代码:

$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;

  " ?>

我可以在写好的文件中使用$var来显示变量。但是我如何在$fp文件中写php代码而不执行它呢?
感谢所有的帮助:)

t30tvxxf

t30tvxxf1#

建议

1.使用动态PHP作为缓存似乎毫无意义(如果它是这样的话)。如果你必须编写静态HTML缓存,你最好通过编写实际的HTML输出(.html)来完成。
1.如果你必须保持页面的动态性,并且还想缓存,有更好的方法来缓存,然后为所有页面创建静态文件。学习使用composer,然后搜索Packagist解决方案。
1.即使你不关心上面的两点,你也应该通过包含一个公共脚本来执行mysqli_connect()。MySQL信息会不时改变。如果发生在你身上,你必须修改大量的文件。

你的问题

正如你在这个网站上的语法高亮所看到的,你生成的字符串中的所有变量(例如$conn$sql)都被PHP理解为字符串中的变量。当PHP运行你的代码时,这些字符串中的变量将在**fwrite()运行之前扩展(即替换为实际值)**。
你可以检查你的输出PHP文件来验证.所有的变量被替换为无意义或干脆消失.你要做的是有变量名保持原样(与美元符号和所有)和写入文件.
这在PHP字符串解析的文档中有解释:
当一个字符串用双引号或heredoc指定时,变量会被解析。
有两种方法可以解决这个问题:
1.转义双引号字符串中的所有美元符号(即用\$替换$)。
1.在你的fwrite中使用单引号。在这种情况下,你必须转义所有的单引号(即用\'替换'),以防止意外结束字符串引号。
你生成的代码还有更多的问题(例如class属性使用了单引号,这也结束了你的单引号字符串,并导致生成的代码中的语法错误)。但是如果我为你修复所有的代码,我会让这个网站成为一个免费的代码编写服务,这不是。
要进一步调试,只需打开生成的PHP文件并检查它有什么语法错误。您可以使用支持语法检查的编辑器(例如VSCodePHP Intelephence)。或者您可以简单地使用php -l <filename>。通过调整您如何生成它来逐个修复它们。

mo49yndu

mo49yndu2#

你所做的是不寻常的,正如其他人所说,我建议你四处寻找更巩固的现成的解决方案。
无论如何,问题是你使用的双引号会导致不必要的变量扩展。
为了避免这种情况,你可以简单地在你正在编写的主 *PHP代码字符串 * 中将单引号换成双引号。(除了错误消息 * * 的行需要外部引号写成\'$sql = 'SELECT * FROM blog WHERE id = $id';行也需要这种做法(它必须变成$sql = "SELECT * FROM blog WHERE id = $id";)-尽管不清楚$id变量来自哪里。
包含代码的字符串似乎也被截断了

相关问题