根据PHP输出的动态html名称?

时间:2013-08-23 12:09:52

标签: php html

我正在使用一小段代码通过PHP生成一个静态html页面。

这是代码:

<?php
ob_start();
file_put_contents('someName.html', ob_get_contents());
// end buffering and displaying page
ob_end_flush();

?>

上面的代码工作正常,它将创建html页面(someName.html)。

我想要做的是将html的名称从“someName”.html更改为PHP输出。 PHP页面是一个动态的PHP页面,它将根据用户通过html表单请求的内容显示一些结果。

例如:用户在输入框中输入2,创建的html页面将是2.html而不是someName.php。

我确实尝试过类似的东西,但这不起作用:

<?php
ob_start();
file_put_contents($usersInput'.html', ob_get_contents());
// end buffering and displaying page
ob_end_flush();

?>

有谁知道我需要怎么做?

编辑:

我现在就这样试过了:

<?php
if (isset($_POST['userInput']))    
{ 
file_put_contents($_POST['userInput'].'.html', ob_get_contents());

}
// end buffering and displaying page
ob_end_flush();

?>

所以基本上用户在html表单的输入字段中输入2,html文件应该被称为2.html。

我得到了这个错误:

Warning: file_put_contents(2.html) [function.file-put-contents]: failed to open stream: No such file or directory on line 1156.

这是在1156行:

file_put_contents($_POST['userInput'].'.html', ob_get_contents());

1 个答案:

答案 0 :(得分:1)

你有语法错误,你忘了一个连接运算符:

file_put_contents($usersInput'.html', ob_get_contents());

file_put_contents($usersInput.'.html', ob_get_contents());
                             ^ -- here

修改

对于failed to open stream错误,您应该使用绝对路径。使用文件时始终建议这样做。

如果要将文件放在与运行脚本相同的目录中:

file_put_contents(__DIR__.'/'.$_POST['userInput'].'.html', ob_get_contents());

还要注意,用户可以输入一个带有不会生成有效文件名的字符的名称!

另外,您可能应该确保该目录是可写的:

is_writable(__DIR__);

检查the documentation关于__DIR__

等魔术常数