Запись JSON POST в файл с использованием PHP

Я пытаюсь записать данные, которые отправляются на мой сервер в текстовый файл. Пример данных, которые отправляются на мой сервер, находится здесь:

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

Я знаю, что данные отправляются, но в моем текстовом файле ничего не записывается. Это просто пусто. Я понятия не имею, куда идти отсюда, к сожалению. Есть идеи?

Вы пытаетесь сохранить объект, используя file_put_contents. Пока параметр data эта функция «Может быть либо строкой, либо массивом, либо ресурсом потока»,

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

Затем вы можете прочитать файл и проанализировать его, если это необходимо.

Я думаю, вы хотите получить исходное содержимое 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 }'; ?> 

Чтобы обойти проблему, я использовал JSON.stringify.

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

Объект 'project' содержит имена клавиш 'и' data ', и я только хотел укрепить его часть данных.

Таким образом, на сервере я могу сделать

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

Я мог бы хранить его непосредственно в файле и сохранять оба преобразования, но я хотел его украсть!

Примечание: Да, я знаю! Не обращайтесь напрямую к $ _POST.