使用PHP将JSON POST记录到文件

时间:2013-06-05 04:51:54

标签: php json

我正在尝试将发布到我的服务器的数据记录到文本文件中。发送到我的服务器的数据示例位于:

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 }';
?>

我知道正在发送数据,但我的文本文件中没有记录任何内容。它每次都是空白的。不幸的是,我不知道从哪里开始。有什么想法吗?

4 个答案:

答案 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)

我尝试了这个方法,它成功了。所以,我在这里分享这个。

来源PHP save POST data to file

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。