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

问题描述 投票:0回答:2

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

您好,在我的代码中,我想使用 php: fwrite() 创建一个新的 .php 文件。 如何在 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 代码而不执行它呢?

感谢您的帮助:)

php fopen fwrite
2个回答
0
投票

一些建议

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

你的问题

正如您在该站点上的语法高亮显示所见,生成的字符串中的所有变量(例如

$conn
$sql
)都被 PHP 理解为字符串中的变量。当 PHP 运行您的代码时,字符串中的这些变量将被expanded(即替换为实际值)beforefwrite()运行。

您可以检查您的输出 PHP 文件来验证。所有的变量都被无意义的替换或干脆消失了。你想要做的是让变量名保持原样(带有美元符号和所有)并写入文件。

有关PHP字符串解析的文档对此进行了解释

当用双引号或 heredoc 指定字符串时,会在其中解析变量。

语法有两种:简单的和复杂的。简单的语法是最常见和方便的。它提供了一种以最小的努力在字符串中嵌入变量、数组值或对象属性的方法。

复杂的语法可以通过表达式周围的大括号来识别。

有两种方法可以解决这个问题:

  1. 转义双引号字符串中的所有美元符号(即用
    $
    替换
    \$
    )。
  2. 在你的 fwrite 中使用单引号。在这种情况下,您必须转义所有单引号(即将
    '
    替换为
    \'
    )以防止意外结束字符串引号。

您生成的代码还有更多问题(例如

class
属性使用单引号,这也结束了您的单引号字符串并导致生成代码中的语法错误)。但是,如果我为您修复所有代码,我会让这个网站成为免费的代码编写服务,但事实并非如此。

要进一步调试,只需打开生成的 PHP 文件并检查它有什么语法错误。您可以使用支持语法检查的编辑器(例如 VSCodePHP Intelephence。或者您可以简单地使用

php -l <filename>
。通过调整生成它的方式来一一修复它们。


-1
投票

你在做什么并不常见,正如其他人所说,我建议你四处寻找更综合的现成解决方案。

无论如何,问题是您使用的双引号会导致变量的意外扩展。

为避免这种情况,您可以简单地将正在编写的主PHP 代码字符串 中的单引号换成双引号。

$sql = 'SELECT * FROM blog WHERE id = $id';
行也需要这种做法(它必须变成
$sql = "SELECT * FROM blog WHERE id = $id";
)——虽然不清楚 $id 变量从哪里来。

你的包含代码的字符串似乎被截断了

© www.soinside.com 2019 - 2024. All rights reserved.