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

2

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

次に、ファイルを読み取り、必要に応じて解析できます。

于 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 に答える