Javascript数组到服务器上的文件

时间:2014-10-20 19:04:05

标签: javascript php

我有一个JavaScript客户端,需要将数据发送到服务器,然后将其保存为文件。 客户端不允许使用websockets,所以我尝试使用JSON发布它,然后使用PHP在服务器上保存它,但因为JavaScript客户端上的数据是Uint32Array,PHP并不知道它是什么。

这就是我在客户端所拥有的

var arrayData = new Uint32Array(256);
...
var formdata = new FormData();
formdata.append("data" , JSON.stringify(arrayData));
var xhr = new XMLHttpRequest();
xhr.open( 'post', 'receive.php', true );
xhr.send(formdata);

然后在服务器上

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

    file_put_contents("upload/" .$fname, data);
}
?> 

我在文本文件中的所有内容都是&#39;数据&#39;和日志中的PHP错误 &#39;使用未定义的常量数据 - 假设&#39;数据&#39;

我不知道如何让PHP将其写成二进制数据,所以任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

替换此行:

file_put_contents("upload/" .$fname, data);

使用:

file_put_contents("upload/" .$fname, $data);

您忘记了$使data变量,而PHP正在搜索名为data的常量。没有找到它,它假设(啊,PHP!)你想写"data"(一个字符串)。

添加:如何保存样本中的二进制数据

// Parse the JSON. $input would be $_POST['data'] for you
$json = json_decode($input);

// This variable contains the string that we'll write to the file
$write = '';

// Loop through the array
for($i = 0; $i < $json->length; $i++) {
    // Append the binary number to $write
    // Note for pack(): 32-bit unsigned integers can be represented with:
    // L -> machine byte order
    // N -> big endian
    // V -> little endian
    $write .= pack('V', $json->{$i});
}

// Then write $write to file
file_put_contents("upload/" .$fname, $write);