【问题标题】:Saving a text file on server using JavaScript使用 JavaScript 在服务器上保存文本文件
【发布时间】:2013-03-21 07:21:49
【问题描述】:

是否可以在不使用 PHP 的情况下使用 JavaScript/jQuery 将文本保存到新的文本文件?我要保存的文本可能包含我不想转义或使用 urlencode 的 HTML 实体、JS、HTML、CSS 和 PHP 脚本!

如果只能使用 PHP 来实现,我如何在不编码的情况下将文本传递给 PHP?

【问题讨论】:

  • 不,不是。此外,如果有人将 js 注入您的页面,那将是一个可怕的安全漏洞。

标签: javascript jquery ajax text


【解决方案1】:

您必须有一个服务器端脚本来处理您的请求,这不能使用 javascript 来完成。

要发送不带 URIencoding 或转义特殊字符的原始数据到 php 并将其保存为新的 txt 文件,您可以使用 post 方法和 FormData 发送 ajax 请求,例如:

JS:

var data = new FormData();
data.append("data" , "the_text_you_want_to_save");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
xhr.open( 'post', '/path/to/php', true );
xhr.send(data);

PHP:

if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = mktime() . ".txt";//generates random name

$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}

编辑:

正如下面 Florian 提到的,XHR 回退不是必需的,因为旧版浏览器 (formdata browser compatibiltiy) 不支持 FormData,因此您可以将 XHR 变量声明为:

var xhr = new XMLHttpRequest();

另外请注意,这仅适用于支持FormData 的浏览器,例如 IE +10。

【讨论】:

  • 这就像一个魅力,文本与所有特殊字符一起保存:),再次感谢。
  • 为什么你在 IE6 上使用 XHR,但使用 FormData?一个或另一个必须离开。
  • @FlorianMargaine(或其他人),您能否编辑答案(这对所有将阅读此已接受答案的人都有用)以提供更好的版本?
  • XMLHttpRequest 无法加载 $php 文件。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。
  • 这种方法可以覆盖已有文件还是只能新建一个?
【解决方案2】:

仅使用 JavaScript 和 jQuery 等客户端脚本无法将内容保存到网站,但通过在 AJAX POST 请求中提交数据,您可以非常轻松地在服务器端执行另一半。

但是,我不建议您将原始内容(例如脚本)如此容易地写入您的主机,因为这很容易被利用。如果您想了解更多关于 AJAX POST 请求的信息,可以阅读 jQuery API 页面:

http://api.jquery.com/jQuery.post/

如果您仍想在主机上保存原始脚本文件,请注意以下几点。如果您要处理这样的文件,则必须非常小心安全!

文件上传(如果 javascript 可以选择文件名,则大多数情况下也适用于发送纯文本) http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=security https://www.owasp.org/index.php/Unrestricted_File_Upload

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2014-03-27
    相关资源
    最近更新 更多