0

我正在使用下面的代码,它只是获取通过表单提交的艺术家的姓名并将其保存为服务器上的 html 文件。

<?php


if (isset($_GET['artist'])) {
$fileName = $_GET['artist'].".html";
$fileHandler = fopen($fileName, 'w') or die("can't create file");
fclose($fileHandler);
}
?>

我要解决的是如何在文件保存之前在文件中添加任何代码。这样每次用户添加艺术家时,我都可以在文件中包含我的模板代码。任何帮助都会很棒:)

4

3 回答 3

1

使用fwrite.

两件事情:

  1. file_put_contents整体会更快。
  2. 你的设计是一个非常糟糕的主意。他们可以在文件系统的任何位置注入文件,例如artist=../../../../etc/passwd%00尝试写入/etc/passwd(%00 是 NUL 字节,这会导致 fopen 终止 C 中的字符串 - 除非已修复)。
于 2012-06-12T01:42:07.190 回答
0

警告 - 非常小心你写入文件系统的内容。在您的示例中,没有什么可以阻止某人写入您从未预料到的文件系统部分(例如,artist='../index'!)。

我真诚地建议您三思而后行,或者将内容保存到数据库中(使用适当的最佳实践,即http://php.net/manual/en/security.database.sql-injection.php)或至少使确保限制文件名字符串中使用的字符(例如,仅允许字符 AZ 或 az 和“_”)。否则它是危险的和可利用的,至少你冒着你的网站被污损或滥用的风险。

正如其他人所说 - 您应该能够使用 fwrite 将 php 代码写入文件系统。

于 2012-06-12T01:46:12.300 回答
0

fwrite()允许您将文本写入文件。

if (isset($_GET['artist'])) {
  $fileName = $_GET['artist'].".html";
  $fileHandler = fopen($fileName, 'w') or die("can't create file");
  fwrite($fileHandler, 'your content goes here');
  fclose($fileHandler);
}
于 2012-06-12T01:41:39.933 回答