如何在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代码而不执行它呢?
感谢所有的帮助:)
2条答案
按热度按时间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文件并检查它有什么语法错误。您可以使用支持语法检查的编辑器(例如VSCode和PHP Intelephence)。或者您可以简单地使用
php -l <filename>
。通过调整您如何生成它来逐个修复它们。mo49yndu2#
你所做的是不寻常的,正如其他人所说,我建议你四处寻找更巩固的现成的解决方案。
无论如何,问题是你使用的双引号会导致不必要的变量扩展。
为了避免这种情况,你可以简单地在你正在编写的主 *PHP代码字符串 * 中将单引号换成双引号。(除了错误消息 * * 的行需要外部引号写成
\'
)$sql = 'SELECT * FROM blog WHERE id = $id';
行也需要这种做法(它必须变成$sql = "SELECT * FROM blog WHERE id = $id";
)-尽管不清楚$id变量来自哪里。包含代码的字符串似乎也被截断了