【问题标题】:Using PHP buffering to save PHP output to HTML in a specific directory使用 PHP 缓冲将 PHP 输出保存到特定目录中的 HTML
【发布时间】:2017-03-01 21:25:06
【问题描述】:

我的网站上有一个用户 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()); 

但是....

我想在我的表单中包含一个下拉选择器,具有不同的“部分”,例如:“新闻”、“体育”、“天气”等...选择特定目录(文件夹)在我的服务器上,因此生成的 html 文件将保存到指定的目录。

我需要表单字段方面的帮助,以及实现此目的的 php 缓冲方面。我不知道从哪里开始。

【问题讨论】:

  • 你能概括一下为什么你想这样做吗?通常,当提交(发布)表单时,它会采取一些操作然后重定向,因此输出出现在 get 请求中。如果你想创建一个文件,你可以使用文件写入命令来完成,这可能比使用输出缓冲系统更可取。
  • 我认为您对 $_REQUEST 的使用有点限制您。为什么不使用 $_POST 并获取表单变量?
  • 我们的建议仍然是使用简单的基于数据库的方法来生成动态页面,正如我们在您上一个关于此问题的评论中所评论的那样。这将为您省去很多家务和清理问题的麻烦。但是,如果您真的想继续投资这种奇特的设置,那么至少在将用户提供的数据用于服务器端文件系统操作之前,请注意真正清理用户提供的数据。否则您将实施巨大的安全漏洞......
  • @JamesShaver 为什么有限制? $_REQUEST 包含表单和 URL 中的所有 $_POST$_GET 参数。
  • @arkascha 比删除所有非字母数字字符能干净多少?

标签: php forms buffering


【解决方案1】:

添加目录下拉列表:

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

然后将其用作脚本中文件名的目录部分:

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

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多