我有一个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将其写成二进制数据,所以任何帮助都将不胜感激!
答案 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);