【问题标题】:Can you use HTML to upload a text input as a file?您可以使用 HTML 将文本输入作为文件上传吗?
【发布时间】:2014-07-02 21:35:53
【问题描述】:

我正在尝试从 HTML 文本表单中获取用户的输入

<input type="text" name="comments" value="Comment">

当用户点击表单的提交按钮时,有没有办法将该输入文本作为 txt 文件提交,就像我有一个

type='file' 

表格类型?

(我可以在这个项目中使用原生的html、js或php)

【问题讨论】:

  • 首先阅读file_put_contents() 的手册。 html和js都不允许你向服务器写入文件,所以它必须是php。
  • 是的,输入是输入,唯一的区别是后端处理略有不同。

标签: javascript php html


【解决方案1】:

首先,创建一个名为temp的目录,然后将.htaccess文件放入其中,其中包含:deny from all。 然后用代码制作一个php脚本:

<?php
if (!empty($_POST)) {
    file_put_contents('temp/file.txt', $_POST['comments']);
}

不要忘记临时文件夹的写权限!

但是!永远不要用.php 扩展保存文件,因为一些真正的黑客可以在textarea 中编写一个php 代码,然后保存并执行它(如果你不使用deny from all 创建.htaccess)。此外,您可以使用 chmod 拒绝执行 temp/ 目录中的所有文件(仅适用于 linux,对于 windows,.htaccess 会帮助您)。您也可以将temp/ 目录放在服务器的www/ (webroot) 目录下(www/ 目录的路径是这样的:/site.com/www/,只需使用路径创建一个目录:/site.com/temp/) ,那么没有人可以执行创建的文件。将文件写入此文件夹将如下所示:

file_put_contents('../temp/file.txt', $_POST['comments']);

【讨论】:

  • 如果您不希望这些文件可以公开访问,将它们存储在网络根目录之外会更容易。
【解决方案2】:

如果您希望用户的输入作为文本文件而不是提交的文本,那么您可以使用以下 javascript 方法:

// JavaScript
function download(filename, text) {
    var dom = document.createElement('a');
    dom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    dom.setAttribute('download', filename);
    dom.click();
}

从按钮捕获点击事件,然后使用来自 cmets 的文件名和文本调用 download() 函数。

【讨论】:

    【解决方案3】:

    type="file" 是发布一个文件扔一个表格。如果你想插入用户给出的文本,你必须在你身边处理它。有几种方法可以在文件中插入内容,您可以查看 fwrite 或 file_put_contents。

    【讨论】:

    • 这不是一个答案,但它与@Dagon 上面的评论几乎完全相同......请考虑扩大你的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2013-03-17
    • 2015-09-10
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多