【问题标题】:Create a text file on a host server from website从网站在主机服务器上创建文本文件
【发布时间】:2018-11-05 03:11:27
【问题描述】:

我试图让用户能够将文本文件写入网站主机服务器上的目录。用例如下所示:

  1. 用户访问 www.example.com/createtext
  2. 用户在文本机器人中输入他们想要保存的内容,例如“你好”
  3. 网站所在的服务器会在其中一个目录中创建一个文本文件。
  4. 在服务器上,现在 C:/somedirectory/dailytexts/ 中有一个文本文件,其中写有“Hello”

我目前编写了一个简单的页面,其中包含一个表单,该表单将接收文本信息并将其保存到具有当前日期名称的文本文件中。

<script language="Javascript">
    var time = new Date();
    var formattedTime = time.toLocaleTimeString();

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

    encodeURIComponent(text));
      pom.setAttribute('download', formattedTime);

      pom.style.display = 'none';
      document.body.appendChild(pom);

      pom.click();
      document.body.removeChild(pom);
    }
</script>

<form id="form" class="topBefore" onsubmit="download(this['name'].value, this['text'].value)">
    <textarea id="message" type="text" placeholder="Hello" name="text"></textarea>
    <input id="submit" type="submit" value="Download Text File">
</form>

这只是将文本文件下载到用户的计算机。相反,我希望在主机上创建文件。

有没有办法做到这一点?特别是,仅使用 JavaScript 或 Java。但是,如果它必须使用 PHP 之类的东西来完成,那么它也可以。

【问题讨论】:

    标签: javascript java php server user-input


    【解决方案1】:

    AFAIK,浏览器中的 JS 只允许你在客户端做一些事情,而不是在不使用...(例如)服务器端的 PHP 脚本的情况下修改服务器内容。 p>

    这个解决方案(现在)只使用 HTML 和 PHP,不需要 JS。

    HTML (修改)

    <form id="form" class="topBefore" action="createtext.php" method="GET">
    <textarea id="message" type="text" placeholder="Hello" name="name"></textarea>
    <textarea id="message2" type="text" placeholder="Hello" name="text"></textarea>
    <input id="submit" type="submit" value="Download Text File">
    

    PHP:(文件名为 createtxt.php

    if(isset($_GET['name']) && isset($_GET['text']))  {
        $filename = preg_replace('#[^A-Za-z0-9_-]#', '', $_GET['name']);
        $file = $_SERVER['DOCUMENT_ROOT']."/textfiles/$filename.txt";
        $f = fopen($file, 'w');
        fwrite($f, $_GET['text']);
        fclose($f);
        echo 'Success.';
    }  else  {
        echo 'Error.';
    }
    

    文件创建需要两个参数 - 文件名和内容,而问题的 HTML 中只提供了一个 textarea。所以现在包含另一个,用于文件名。 jQuery/JS 被移除。相反,表单现在将数据发送到 createtext.php,它创建文件 (fopen),写入文本 (fwrite) 并回显“成功”。 - 这里注意两点:

    1. 我们将文本文件保存到与createtext.php 位于同一目录中的名为textfiles 的文件夹中。该文件夹必须从以前开始存在 - 它不会自动创建,如果不存在,PHP 会抛出错误。
    2. 您可以将 echo 'Success.'; 替换为其他操作:例如重定向到另一个页面或同一页面 (header),或 echoing/readfile-ing HTML 页面。

    【讨论】:

    • 太棒了,谢谢。我将在这周尝试实施,看看效果如何。
    • 您发布的代码对您有用吗?我一整天都在努力让一切正常工作,但没有运气。但我也没有自己的测试服务来真正测试,我不确定这是否是它对我不起作用的原因。
    • @Stamden 不 - 抱歉,我现在更改了代码 - JS 有一组额外的括号(即使删除了这些括号 :/ 也不起作用)。这个虽然有效(在 XAMPP 7.0.5 上测试)。
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2014-07-26
    • 2016-02-11
    • 2017-02-02
    • 2013-02-17
    相关资源
    最近更新 更多