2017-10-03 3 views
0

J'ai actuellement un programme qui effectuera des tests sur un serveur et il envoie les résultats au fichier test.php. Je suis en train de rediriger mes données POST à ​​la page reports.php, ces données sont au format JSON et je veux afficher les données sur la page en reports.php bien (éventuellement). En ce moment, je veux juste faire écho au résultat du POST sur mon reports.php donc je peux dépanner et improvise mon code. Comment puis-je faire ceci? Actuellement, quand j'ouvre le report.php, je reçois une page blanche vierge. C'est ce que j'ai dans mon fichier test.php.données POST Rediriger JSON à une autre page pour afficher

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

Répondre

2

d'observation d'abord. Dans results.php vous avez les éléments suivants:

echo print_r($token); 

Vous écho, ou vous print_r(), vous ne faites pas les deux. sortie d'écho de la volonté d'une chaîne, print_r() va afficher une chaîne de caractères ou une version lisible par l'homme d'un objet ou d'un tableau. print_r() peut être bon pour les tests, mais votre code final devrait faire écho la sortie que vous voulez imprimer sur la page.

Quoi qu'il en soit, comme pour votre question ...

Il semble que vous obtenez un peu confus avec vos noms de variables entre vos deux fichiers php, à savoir $result.

Voici vos données POST de test.php, les clés de ce tableau deviendront les clés du tableau $ _POST qui sera affiché à 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], 
); 

Ainsi $_POST['id'], $_POST['version'] etc seront mis dans reports.php

maintenant, voici votre code pour results.php:

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

Vous référencez $_POST['result'] mais le résultat est pas l'un des k tableau eys que vous publiez, il ne sera donc pas défini et votre sortie sera vide. Vous avez défini $result comme la variable test.php qui contiendra la réponse de reports.php, mais à l'intérieur reports.php il est non défini.

Comme vous souhaitez récupérer tout le contenu dans la réponse de reports.php, il n'est pas nécessaire de spécifier une clé de tableau pour $_POST, il suffit de renvoyer le tableau entier.

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

Ou si vous le voulez JSON:

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

Enfin, en se référant à ceci:

Actuellement, quand j'ouvre la report.php je reçois une page blanche

Si vous l'ouvrez dans votre navigateur, il sera vide, car vous faites un GE T demande, pas une demande POST. Il ne retournera le contenu que si vous lui envoyez des données.Après avoir dit tout cela, j'ai l'impression que vous essayez de réinventer la roue un peu avec cette approche. Ma recommandation serait de vérifier RequestBin où vous pouvez créer une URL pour envoyer des données à et inspecter toutes les demandes provenant de votre serveur. C'est génial pour le débogage et c'est gratuit.

+0

Wow, c'est très utile !! merci beaucoup pour la réponse détaillée. laisse-moi le lire encore quelques fois et te poser des questions si j'en ai. Merci encore!! – kkmoslehpour

+0

juste pour m'assurer que je fais cela correctement, pour la corbeille de la demande, je mets simplement le '$ url' dans mon' test.php' à l'URL de la corbeille de la demande et puis-je le récupérer dans mon 'reports.php'? '$ result = file_get_contents ('https://requestb.in/1i8lmm81');' 'echo $ result;'? J'ai essayé ceci mais mon reports.php est toujours vide. Toutefois, je vois les données de publication dans la page de la corbeille des demandes après que je me sois rafraîchie. – kkmoslehpour

+1

Inutile d'altérer vos rapports.php Vous venez d'inspecter la corbeille de requête dans votre navigateur en la rafraîchissant comme vous l'avez fait et en déboguant de cette façon. Une fois que vous l'avez travaillé comme prévu, vous le pointez sur vos rapports.php – miknik