Я пытаюсь записать данные, которые отправляются на мой сервер в текстовый файл. Пример данных, которые отправляются на мой сервер, находится здесь:
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.