6

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

http://dev.datasift.com/docs/push/sample-output-file-based-connectors

它在该页面上说:

“对于所有基于文件的连接器,有效负载是一个包含元数据的 JSON 对象以及一个包含流中 JSON 对象的数组。”

我在 datasift 将数据发送到的位置有以下 PHP:

<?php
$myFile = "testFile.txt";
$phpObj = json_decode($_POST['json']);
file_put_contents($myFile,$phpObj);
echo '{ "success": true }';
?>

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

4

4 回答 4

6

我认为您想获取 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 }';
?>
于 2013-06-05T04:59:02.013 回答
2

您正在尝试使用 file_put_contents 保存对象。Whiledata参数此函数“可以是字符串、数组或流资源”

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

然后您可以读取文件并在必要时对其进行解析。

于 2013-06-05T05:06:29.130 回答
1

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

PHP 将 POST 数据保存到文件

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
于 2020-12-28T14:44:39.547 回答
0

为了绕过这个问题,我使用了 JSON.stringify。

'formSave' : function(project){
    var s = {
        "name": project.name,
        "data": JSON.stringify(project.data)
    };

    $.post("sdcform/formSave/" + project.name, s);
}

“项目”对象包含键“名称”和“数据”,我只想将它的数据部分字符串化。

这种方式在服务器上我可以做到

$data = isset($_POST['data']) ? json_decode($_POST['data']): new \stdClass();
file_put_contents($filename, json_encode($data, JSON_PRETTY_PRINT));

我可以将它直接存储到文件中并保存两个转换,但我想美化它!

注意:是的,我知道!不要直接访问 $_POST。

于 2015-02-04T16:06:53.003 回答