我要做的是以下内容: 我想从我的jQuery代码发送一个JSON对象到我服务器上的PHP文件。 我希望PHP文件将此JSON对象附加到我的文本文件中。
问题:
我正在使用PHP文件。我正在发送数据,我需要PHP将数据保存在变量中,以便我可以将其写入文本文件。问题是它没有那样做。我发布的帖子显然没有内容(它只显示array()
)。
我的jQuery代码:
var username = "";
var password = "";
var url = window.location.href;
var title = document.title;
var detailsArray = {title : [{
"title" : title,
"url" : url,
"username" : username,
"password" : password
}]
};
$(document).keydown(function(e) {
if(e.which == 17) {
console.log(detailsArray);
$.ajax({
type: "POST",
url: "http://......./Server.php",
data: detailsArray,
success: function(data) {
console.log("Data sent!"+data);
}
});
}
});
我的PHP代码:
$dataToBeInserted = $_POST;
$file = "JSON.json";
//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);
//Remove the last 2 characters from the JSON file
ftruncate($fh, $stat['size']-2);
//Add the data from $dataToBeInserted to the file
echo fwrite($file, $dataToBeInserted );
//Close the file
fclose($fh);
这个PHP文件会出现一些警告/错误:
Array ( )
Warning: fwrite() expects parameter 1 to be resource, string given in Server.php on line 17
Warning: fwrite() expects parameter 1 to be resource, string given in Server.php on line 19
我在这里做错了什么?我不习惯PHP,因此可能存在一堆错误,但我认为jQuery方面没问题。
答案 0 :(得分:1)
首先你的fwrite($ file)应该是fwrite($ fh)..你必须写入fopen返回的文件句柄...而不是文件的字符串名称。
$dataToBeInserted = $_POST;
$file = "JSON.json";
//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);
//Remove the last 2 characters from the JSON file
ftruncate($fh, $stat['size']-2);
//Add the data from $dataToBeInserted to the file
echo fwrite($fh, $dataToBeInserted );
//Close the file
fclose($fh);
但是你的JSON文件不完整/已损坏。因为你删除了2个字符,但从未添加过它们。
老实说,解决这个问题的简单方法就是$data = json_decode(file_get_contents('JSON.json'));
if (!$data) $data = array();
array_push($data, $_POST);
file_put_contents('JSON.json', json_encode($data);
但是,这会得到非常昂贵的IO /资源
其他方法....见评论
$dataToBeInserted = $_POST;
$file = "JSON.json";
//Open the file with read/write permission or show text
$fh = fopen($file, 'a+') or die("can't open file");
$stat = fstat($fh);
//Remove the last 2 characters from the JSON file
//ftruncate($fh, $stat['size']-2);
//Add the data from $dataToBeInserted to the file with a comma before it if there is data in file already.
if ($stat['size'] != 0) $append = ",";
echo fwrite($fh, $append . json_encode($dataToBeInserted) );
//Close the file
fclose($fh);
现在阅读它..
$data = file_get_contents('JSON.json');
$dataArray = json_decode('[' . $data . ']');
所以现在每次我们写入文件时都会输入一个逗号,然后当我们读取它时,我们将它包装在括号中,这样它就是我们一直在做的写入数组。
虽然这不会像资源密集型一样,但它会被明智地阅读......但那是因为你想要一个文件中的所有内容。