如何使用 PHP 从 HTML 文本区域保存 TXT 文件?
Posted
技术标签:
【中文标题】如何使用 PHP 从 HTML 文本区域保存 TXT 文件?【英文标题】:How can I save TXT Files from a HTML textarea, using PHP? 【发布时间】:2012-09-28 05:43:02 【问题描述】:我正在尝试为我的网站制作一个文本文件存储系统。
这是我目前所拥有的。
我已经完成了一些工作,但在进行了一些我认为会有所帮助的更改后,我遇到了更多错误。
我正在尝试在不更改页面或网址的情况下完成这项任务。
<!DOCTYPE html>
<html>
<body>
<?php
if (isset($_POST))
//Save File
$file = fopen($_POST['filename'] & ".txt","r+");
$text = $_POST["textdata"];
file_put_contents($file, $text);
fclose($file);
//Open File
$file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file.");
while(!feof($file))
echo fgets($file). "<br />";
fclose($file);
echo '
<form name="savefile" method="post" action="' . $_SERVER['PHP_SELF'] . '">
File Name: <input type="text" name="filename" value=""><br/>
<textarea rows="20" cols="100" name="textdata"></textarea><br/>
<input type="submit" name="submit" value="Save Text to Server">
</form>
<br/><hr style="width: 100%; height: 4px;"><br/>
<form name="openfile" method="post" action="' . $_SERVER['PHP_SELF'] . '">
Open File: <input type="text" name="filename" value="">
<input type="submit" name="submit" value="Submit File Request">
</form>';
?>
</body>
<html>
如果唯一的方法是将它重定向到一个 php 页面,然后将其发送回来,那很好,但我不知道如何做到这一点,(尽管它可能更简单)
感谢您为我提供的任何帮助或建议!
-杰克
【问题讨论】:
有效吗?您遇到什么错误? 如果您不想更改页面,您正在寻找 AJAX 解决方案。有很多方法可以做到这一点,还有很多图书馆可以为您提供支持。看看 PrototypeJS 和 JQuery。 【参考方案1】:首先,非常感谢您的帮助!
我真的很感激那些更有经验的人偶尔能帮助一个新手。
在花了一些时间根据您的一些建议修改我的代码之后,我终于让它工作了! :D
我将在此处保留最终代码,以防其他人偶然发现此主题并遇到类似问题。
<!DOCTYPE HTML>
<html>
<body style="background-color: rgb(225,225,225)">
<form name="savefile" method="post" action="">
File Name: <input type="text" name="filename" value=""><br/>
<textarea rows="16" cols="100" name="textdata"></textarea><br/>
<input type="submit" name="submitsave" value="Save Text to Server">
</form>
<br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/>
<form name="openfile" method="post" action="">
Open File: <input type="text" name="filename" value="">
<input type="submit" name="submitopen" value="Submit File Request">
</form>
<br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/>
File Contents:<br/>
<?php
if (isset($_POST))
if ($_POST['submitsave'] == "Save Text to Server" && !empty($_POST['filename']))
if(!file_exists($_POST['filename'] . ".txt"))
$file = tmpfile();
$file = fopen($_POST['filename'] . ".txt","a+");
while(!feof($file))
$old = $old . fgets($file). "<br />";
$text = $_POST["textdata"];
file_put_contents($_POST['filename'] . ".txt", $old . $text);
fclose($file);
if ($_POST['submitopen'] == "Submit File Request")
if(!file_exists($_POST['filename'] . ".txt"))
exit("Error: File does not exist.");
$file = fopen($_POST['filename'] . ".txt", "r");
while(!feof($file))
echo fgets($file). "<br />";
fclose($file);
?>
</body>
</html>
希望这会有所帮助!
-杰克
【讨论】:
【参考方案2】:就像 Geek Num 88 所说,使用 AJAX(甚至 Websockets)会阻止重新加载页面。但是您已经几乎可以使用此代码了。 file_put_contents 第一个参数应该是一个指向文件路径的字符串。你现在给它的是一个打开文件的资源。
所以只需删除 fopen 命令并将文件名分配给 $file。
小提示:读取文件与使用等效的file_get_contents 一样简单。不过,我确实看到了这种实现的一些安全隐患。所以总是过滤输入和转义输出。但那完全是另一回事了。
编码愉快!
【讨论】:
【参考方案3】:仅当提交来自第一个表单时,写入部分才需要执行。如果从第一个表单提交,下面的代码将写入文件,如果从第二个表单提交,将读取文件。
if (isset($_POST))
if ($_POST['submit'] == "Save Text to Server" && !empty($_POST['filename']))
//Save File
$file = fopen($_POST['filename'] & ".txt","r+");
$text = $_POST["textdata"];
file_put_contents($file, $text);
fclose($file);
if ($_POST['submit'] == "Submit File Request")
//Open File
$file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file.");
while(!feof($file))
echo fgets($file). "<br />";
fclose($file);
如果您需要在不重新加载页面的情况下执行此操作,则需要使用 Ajax 从表单发布到上述代码。
【讨论】:
【参考方案4】:$file = fopen($_POST['filename'] & ".txt","r+");
PHP 中的连接字符是 . (点)而不是 &。文件名由用户定义,因此您应该使用模式 'w' 调用 fopen,它会尝试创建文件以防文件不存在。
测试isset($_POST)
总是返回true,而不是测试isset($_POST['filename'])
。
【讨论】:
【参考方案5】:Olijake 的 PHP 有很多错误,改为制作简单的自保存页面,可能存在安全问题,并且 PHP 部分也在单独的文件中,因为默认情况下它不会在客户端可见,但它可以工作(在移动 Chrome)..
<!DOCTYPE HTML>
<html>
<body onload="document.forms[0].textdata.value=document.body.parentElement.outerHTML">
<form name="savefile" method="post" action="">
<textarea rows="16" cols="100" name="textdata"></textarea><br/>
<input type="submit" name="submitsave" value="Save Text to Server">
</form>
</body>
</html>
<?php
if (!empty($_POST["textdata"]))
$old="";
$file = fopen("saver.php" ,"a+");
while(!feof($file))
$old = $old . fgets($file);
if ($_POST['submitsave'] == "Save Text to Server")
$file = fopen("index.php" ,"a+");
$text = $_POST["textdata"];
file_put_contents("index.php", $text . $old);
fclose($file);
?>
【讨论】:
以上是关于如何使用 PHP 从 HTML 文本区域保存 TXT 文件?的主要内容,如果未能解决你的问题,请参考以下文章