2017-10-03 12 views
0

私は現在、サーバー上でテストを実行するプログラムを持っており、結果をtest.phpファイルに送信します。 POSTデータをreports.phpページにリダイレクトしようとしていますが、このデータはJSON形式であり、pages.phpのページにデータをきれいに(最終的に)表示したいと考えています。今すぐPOSTの結果をreports.phpにエコーして、トラブルシューティングを行い、コードを即座に実行できます。これどうやってするの?現在、report.phpを開くと空白のページが表示されます。これは私のtest.phpファイルにあります。表示する別のページにPOST JSONデータをリダイレクト

test.phpを

#!/usr/bin/php 
<?php 
// turn on error reporting 
error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

//URL to POST JSON data to 
$url = "http://my/dir/to/reports.php"; 

$post_data = array(
    'id' => $argv[1], 
    'version' => $argv[2], 
    'server' => $argv[3], 
    'status' => $argv[4], 
    'test' => $argv[5], 
    'time' => $argv[6], 
    'body' => $argv[7], 
); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
$result = curl_exec($ch); 

if (curl_error($ch)) { 
    echo 'Curl error: ' . curl_error($ch); 
} else { 
    echo "success: \n\n"; 
    print_r($result); 
} 
curl_close($ch); 
?> 

reports.php

<?php //reports.php 
//This php file is to receive the POST data coming from php files. 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $token = $_POST['result']; 
    echo print_r($token); 
} 
?> 

答えて

2

最初の観測。

echo print_r($token); 

あなたはエコー、またはあなたは(しますprint_r)、あなたは両方をしない:results.phpでは、以下があります。 Echoは文字列を出力し、print_r()はオブジェクトまたは配列の文字列または人間が読める形式を出力します。 print_r()はテストには適していますが、最後のコードはページに出力したい出力をエコーし​​ます。あなたは2つのphpファイル、つまり$resultの間、あなたの変数名を持つビットが混乱してきているよう

とにかく、

...ご質問のように思えます。ここで

この配列のキーはreports.phpして掲載されます$ _POSTの配列のキーとなり、test.phpをからあなたのPOSTデータです:

$post_data = array(
    'id' => $argv[1], 
    'version' => $argv[2], 
    'server' => $argv[3], 
    'status' => $argv[4], 
    'test' => $argv[5], 
    'time' => $argv[6], 
    'body' => $argv[7], 
); 

ので$_POST['id'], $_POST['version']などが設定されます。 reports.phpに

は今ここresults.phpのためのあなたのコードです:

​​

あなたは$_POST['result']を参照しているが、結果は配列kの一つではありませんあなたが投稿しているので、それは設定されず、あなたの出力は空になります。 test.phpの変数に$resultを定義しました。これはreports.phpからの応答を含みますが、reports.php内では未定義です。

すべてのコンテンツをreports.phpの応答に戻したい場合は、$_POSTの配列キーを指定する必要はなく、配列全体を返すだけです。

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    print_r($_POST); 
} 

それとも、JSONとしてそれをしたい場合:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    echo json_encode($_POST); 
} 

最後に、参照してこれに:

現在

私はreport.phpを開いたとき、私は空白のページを取得します

ブラウザで開いている場合は、GEを作成するときに空白になりますT要求ではなく、POST要求である。それはあなたがそれにデータをPOSTする場合にのみ内容を返します。

あなたはこのアプローチでホイールを少し改革しようとしているような気がします。私は、RequestBinをチェックアウトしてPOSTデータのURLを作成し、サーバーからのすべてのリクエストを調べることをお勧めします。デバッグには最適ですし、無料です。

+0

これは非常に参考になります!詳細な対応にはどうもありがとうございます。それを何度か読んでもらい、病気があれば病気をしてください。再度、感謝します!! – kkmoslehpour

+0

ちょうど私がこれを正しく行っていることを確認するために、リクエストビンのために、私は 'test.php'の' $ url'をリクエストビンのURLにセットして 'reports.php'でそれを取得しますか? '$ result = file_get_contents( 'https://requestb.in/1i8lmm81');' 'echo $ result;'?私はこれを試みたが、私のreports.phpはまだ空白である。しかし、私はリフレッシュ後、リクエストビンページに投稿データが表示されます。 – kkmoslehpour

+1

あなたのreports.phpを変更する必要はありません。ブラウザでリクエストビンを調べるだけで、リフレッシュしてそのようにデバッグできます。いったん期待したとおりに働かせたら、あなたのreports.phpに戻します。 – miknik

関連する問題