使用PHP缓冲将PHP输出保存到特定目录中的HTML

使用PHP缓冲将PHP输出保存到特定目录中的HTML,php,forms,buffering,Php,Forms,Buffering,我的网站上有一个用户HTML表单。在表单“提交”时,我使用PHP缓冲将输出保存为根目录中的html文件 当前,该文件使用从其中一个表单字段获取的指定页面名成功生成并保存。到目前为止,一切顺利 以下代码出色地实现了这一点: <?php ob_start(); $headline=preg_replace('#[^_0-9a-zA-Z]#', '_', $_REQUEST['banner']); ?> /* My 'Form Page' Content Here */ <?ph

我的网站上有一个用户HTML表单。在表单“提交”时,我使用PHP缓冲将输出保存为根目录中的html文件

当前,该文件使用从其中一个表单字段获取的指定页面名成功生成并保存。到目前为止,一切顺利

以下代码出色地实现了这一点:

<?php 
ob_start(); 
$headline=preg_replace('#[^_0-9a-zA-Z]#', '_', $_REQUEST['banner']);
?>
/* My 'Form Page' Content Here */
<?php 
echo ''; 
file_put_contents($headline . '.html', ob_get_contents()); 

/*这里是我的“表单页”内容*/

添加目录下拉列表:

<select name="directory">
    <option value="news">News</option>
    <option value="sports">Sports</option>
    ...
</select>

你能概述一下你为什么要这样做吗?通常,当提交(post)表单时,它将执行一些操作,然后重定向,因此输出将显示在get请求中。如果你想创建一个文件,你可以使用文件写入命令,这可能比使用输出缓冲系统更好。我认为你使用$u请求限制了你一点。为什么不使用$\u POST并获取表单变量呢?我们的建议仍然是使用一种简单的基于数据库的方法来生成动态页面,正如我们在上一个问题中所评论的那样。这将为你节省很多家务和清理的麻烦。但是,如果您真的想继续投资于这种奇特的设置,那么在将用户提供的数据用于服务器端文件系统操作之前,至少要注意真正清理这些数据。你将实现一个巨大的安全漏洞,否则…@JamesShaver为什么会受到限制
$\u请求
包含表单和URL中的所有
$\u POST
$\u GET
参数。@arkascha它比删除所有非字母数字字符要干净多少?
$dir = $_REQUEST['directory'];
$valid_directories = array('news', 'sports', 'weather', ...);
if (!in_array($dir, $valid_directories)) {
    die("Invalid directory");
}
file_put_contents("$dir/$headline.html", ob_get_contents());