web-dev-qa-db-fra.com

Comment capturer la sortie PHP dans une variable?

Je génère une tonne de XML à transmettre à une API en tant que variable de publication lorsqu'un utilisateur clique sur un bouton de formulaire. Je veux également pouvoir montrer à l'utilisateur le XML au préalable.

Le code est sorta comme le suivant dans la structure:

<?php
    $lots of = "php";
?>

<xml>
    <morexml>

<?php
    while(){
?>
    <somegeneratedxml>
<?php } ?>

<lastofthexml>

<?php ?>

<html>
    <pre>
      The XML for the user to preview
    </pre>

    <form>
        <input id="xml" value="theXMLagain" />
    </form>
</html>

Mon XML est généré avec quelques boucles while et autres. Il doit ensuite être affiché aux deux endroits (l'aperçu et la valeur du formulaire).

Ma question est. Comment puis-je capturer le XML généré dans une variable ou quoi que ce soit, donc je n'ai qu'à le générer une fois, puis à l'imprimer comme prévu pour le générer dans l'aperçu, puis à nouveau dans la valeur du formulaire?

53
Binarytales
<?php ob_start(); ?>
<xml/>
<?php $xml = ob_get_clean(); ?>
<input value="<?php echo $xml ?>" />͏͏͏͏͏͏
100
moo

Mettez cela à votre départ:

ob_start ();

Et pour récupérer le tampon:

$ value = ob_get_contents (); 
 ob_end_clean ();

Voir http://us2.php.net/manual/en/ref.outcontrol.php et les fonctions individuelles pour plus d'informations.

43
Robert K

Cela ressemble à ce que vous voulez PHP Output Buffering

ob_start(); 
// make your XML file

$out1 = ob_get_contents();
//$out1 now contains your XML

Notez que la mise en mémoire tampon de sortie empêche l'envoi de la sortie jusqu'à ce que vous la "vidiez". Voir Documentation pour plus d'informations.

10
maxsilver

Vous pouvez essayer ceci:

<?php
$string = <<<XMLDoc
<?xml version='1.0'?>
<doc>
  <title>XML Document</title>
  <lotsofxml/>
  <fruits>
XMLDoc;

$fruits = array('Apple', 'banana', 'orange');

foreach($fruits as $fruit) {
  $string .= "\n    <fruit>".$fruit."</fruit>";
}

$string .= "\n  </fruits>
</doc>";
?>
<html>
<!-- Show XML as HTML with entities; saves having to view source -->
<pre><?=str_replace("<", "&lt;", str_replace(">", "&gt;", $string))?></pre>
<textarea rows="8" cols="50"><?=$string?></textarea>
</html>
1
mattoc