我正在尝试将发布到我的服务器的数据记录到文本文件中。发送到我的服务器的数据示例位于:
http://dev.datasift.com/docs/push/sample-output-file-based-connectors
它在该页面上说:
“对于所有基于文件的连接器,有效内容是包含元数据的JSON对象,以及包含流中JSON对象的数组。”
我在数据快速发送数据的位置有以下PHP:
<?php
$myFile = "testFile.txt";
$phpObj = json_decode($_POST['json']);
file_put_contents($myFile,$phpObj);
echo '{ "success": true }';
?>
我知道正在发送数据,但我的文本文件中没有记录任何内容。它每次都是空白的。不幸的是,我不知道从哪里开始。有什么想法吗?
答案 0 :(得分:4)
我想你想获得POST的原始内容,这对我来说同时适用于POST和PUT:
$phpObj = json_decode(file_get_contents("php://input"));
$_POST
包含来自x-www-form-urlencoded
内容的数组,而不是json。
希望指出正确的方向:)
编辑: @ user4035是对的......您还试图将php对象保存到文件中...这就是我要做的:
<?php
$jsonString = file_get_contents("php://input");
$myFile = "testFile.txt";
file_put_contents($myFile,$jsonString);
echo '{ "success": true }';
?>
答案 1 :(得分:2)
您正在尝试使用file_put_contents保存对象。虽然data
参数此函数&#34;可以是字符串,数组或流资源&#34;
http://php.net/manual/en/function.file-put-contents.php
看看这个例子:
<?php
$json = '
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
';
$phpObj = json_decode($json);
var_dump($phpObj);
$myFile = "testFile.txt";
file_put_contents($myFile, $phpObj);
?>
它正确地解析了json,但也没有保存任何东西,因为php不知道如何序列化$ phpObj对象。
您需要保存原始JSON字符串:
<?php
$myFile = "testFile.txt";
file_put_contents($myFile,$_POST['json']);
echo '{ "success": true }';
?>
然后你可以阅读文件并在必要时解析它。
答案 2 :(得分:1)
我尝试了这个方法,它成功了。所以,我在这里分享这个。
web_folder/index.php
<?php
$responseBody = file_get_contents('php://input');
$json = json_decode($responseBody);
//return data
echo json_encode($json);
//Save in json file
if($json){
$fp = fopen('results_'.time().'.json', 'w');
fwrite($fp, json_encode($json));
fclose($fp);
}
?>
并在终端中运行以下代码进行测试,它将在同一文件夹中创建一个带有 POST 请求的 JSON 文件。 (这里我使用 localhost)或者你可以使用 Postman 进行测试。
curl -i -X PUT -d '{"name":"codehref"}' http://localhost:8888/web_folder/index.php
答案 3 :(得分:0)
为了绕过这个问题,我使用了JSON.stringify。
'formSave' : function(project){
var s = {
"name": project.name,
"data": JSON.stringify(project.data)
};
$.post("sdcform/formSave/" + project.name, s);
}
&#39>项目&#39;对象包含键&#39; name&#39;和&#39;数据&#39;我只是想对它的数据部分进行字符串化。
我可以在服务器上这样做
$data = isset($_POST['data']) ? json_decode($_POST['data']): new \stdClass();
file_put_contents($filename, json_encode($data, JSON_PRETTY_PRINT));
我可以将它直接存储到文件中并保存转换但我想要很好用!
注意:是的,我知道!不要直接访问$ _POST。