Php 将POST JSON数据重定向到另一个页面以显示

Php 将POST JSON数据重定向到另一个页面以显示,php,redirect,post,Php,Redirect,Post,我目前有一个程序,它将在服务器上运行测试,并将结果发送到test.php文件。我正在尝试将我的POST数据重定向到reports.php页面,这些数据是JSON格式的,我希望在reports.php页面上很好地显示数据(最终)。现在我只想在我的reports.php上回显这篇文章的结果,这样我就可以对代码进行故障排除和临时修改。我该怎么做?目前,当我打开report.php时,会看到一个空白的白色页面。这是我的test.php文件中的内容 test.php #!/usr/bin/php <

我目前有一个程序,它将在服务器上运行测试,并将结果发送到test.php文件。我正在尝试将我的POST数据重定向到reports.php页面,这些数据是JSON格式的,我希望在reports.php页面上很好地显示数据(最终)。现在我只想在我的reports.php上回显这篇文章的结果,这样我就可以对代码进行故障排除和临时修改。我该怎么做?目前,当我打开report.php时,会看到一个空白的白色页面。这是我的test.php文件中的内容

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);
?>
#/usr/bin/php
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);
}
?>

第一次观察。在results.php中,您有以下内容:

echo print_r($token);
您可以回显,也可以打印\r(),但不能同时执行这两项操作。Echo将输出字符串,print_r()将输出字符串或对象或数组的人类可读版本。print_r()可以很好地用于测试,但是最终的代码应该会将您想要打印的任何输出回显到页面上

不管怎样,关于你的问题

似乎您对两个php文件之间的变量名有点困惑,即
$result

这是test.php中的POST数据,此数组中的键将成为$\u POST数组中的键,该数组将发布到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],
);
因此将在reports.php中设置
$\u POST['id']、$\u POST['version']

<?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);
}
?>
下面是results.php的代码:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $token = $_POST['result'];
    echo print_r($token);
}
您正在引用
$\u POST['result']
,但result不是您正在发布的数组键之一,因此它不会被设置,并且您的输出将为空。您已经将
$result
定义为test.php中的变量,该变量将包含reports.php的响应,但在reports.php中它是未定义的

由于您希望reports.php的响应中返回所有内容,因此无需为
$\u POST
指定数组键,只需返回整个数组即可

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    print_r($_POST);
} 
或者,如果您希望将其作为JSON:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    echo json_encode($_POST);
} 
最后,关于这一点:

目前,当我打开report.php时,会看到一个空白的白色页面

如果您在浏览器中打开它,那么它将是空白的,因为您正在发出GET请求,而不是POST请求。只有在您向其发布数据时,它才会返回内容


说了这么多,我觉得你正试图用这种方法重新发明轮子。我的建议是检查您可以在哪里创建一个URL来向服务器发布数据并检查来自服务器的所有请求。这是伟大的调试,它是免费的

首次观察。在results.php中,您有以下内容:

echo print_r($token);
您可以回显,也可以打印\r(),但不能同时执行这两项操作。Echo将输出字符串,print_r()将输出字符串或对象或数组的人类可读版本。print_r()可以很好地用于测试,但是最终的代码应该会将您想要打印的任何输出回显到页面上

不管怎样,关于你的问题

似乎您对两个php文件之间的变量名有点困惑,即
$result

这是test.php中的POST数据,此数组中的键将成为$\u POST数组中的键,该数组将发布到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],
);
因此将在reports.php中设置
$\u POST['id']、$\u POST['version']

<?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);
}
?>
下面是results.php的代码:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $token = $_POST['result'];
    echo print_r($token);
}
您正在引用
$\u POST['result']
,但result不是您正在发布的数组键之一,因此它不会被设置,并且您的输出将为空。您已经将
$result
定义为test.php中的变量,该变量将包含reports.php的响应,但在reports.php中它是未定义的

由于您希望reports.php的响应中返回所有内容,因此无需为
$\u POST
指定数组键,只需返回整个数组即可

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    print_r($_POST);
} 
或者,如果您希望将其作为JSON:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    echo json_encode($_POST);
} 
最后,关于这一点:

目前,当我打开report.php时,会看到一个空白的白色页面

如果您在浏览器中打开它,那么它将是空白的,因为您正在发出GET请求,而不是POST请求。只有在您向其发布数据时,它才会返回内容


说了这么多,我觉得你正试图用这种方法重新发明轮子。我的建议是检查您可以在哪里创建一个URL来向服务器发布数据并检查来自服务器的所有请求。这是伟大的调试,它是免费的

哇,这很有帮助!!非常感谢您的详细回复。让我再读几遍,如果有问题,我会问你。再次感谢!!为了确保我的操作正确,对于请求bin,我只需将
test.php
中的
$url
设置为请求bin的url,然后在
reports.php
中检索它$结果=文件获取内容(');`<代码>echo$结果?我尝试了这个,但是我的reports.php仍然是空的。但是,刷新后,我确实在request bin页面中看到了post数据。无需更改您的reports.php您只需在浏览器中通过刷新检查request bin,并以这种方式进行调试。一旦你让它按照你的预期工作,然后你把它指向你的报告。phpHi miknik,最后一个问题。因此,我可以成功地看到请求箱中的所有POST数据,现在我希望能够使用这些数据在
reports.php
页面中显示它。我更改了脚本中的
$url
以指向
reports.php
,并使用您上面建议的方法检索数据
$\u POST['id'],$\u POST['version']
,但是,当我回送这些变量时,我应该能够看到回送的结果吗?我在哪里能看到他们?或者我如何使用它们?我的目的是为每个帖子结果生成一个链接,当用户点击链接时,它会显示出来。数据的去向取决于请求的方式。在当前设置中,您从reports.php返回的所有内容都将进入test.php中的$result变量。多美啊