2012-08-26 3 views
3

J'ai écrit un petit script en ligne de commande pour traiter un document [un fichier de démarquage avec inserts de notation musicale lilypond, par souci d'exhaustivité].Sortie imprimée sur le terminal même avec ob_start() lorsque le script est exécuté à partir de la ligne de commande

#!/usr/bin/env php 
<?php  

$body = ""; 

... 
// text gets processed here and stored in $body 
... 

ob_start(); 
include 'template.php'; 
file_put_contents(
    __DIR__ . '/' . str_replace('.md', '.html', $argv[1]), 
    ob_get_flush() 
); 

template.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    ... 
</head> 
<body> 
    <div id="wrapper"> 
    <?php echo Markdown($body); ?> 
    </div> 
</body> 
</html> 

Quand j'appelle:

$ ./phlily source.md 

fichier est généré correctement, mais le contenu du modèle sont imprimés à la console aussi:

GNU LilyPond 2.14.2 
Processing `/Users/.../phlily/ly/4add05a74d249f34b3875ef6c3c1d79763927960.ly' 
Parsing... 
Converting to PNG... 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
... 
</html> 

et c'est ennuyeux parce que je veux lire les erreurs et les avertissements du script LilyPond, étant enterrés derrière le mur html dans le terminal. En bref, est-il possible de fermer le tampon de sortie dans un environnement CLI?

+0

Que contient 'template.php'? – Ryan

Répondre

7

Je pense que vous voulez ob_get_clean() au lieu de ob_get_flush():

ob_get_clean:

ob_get_clean - Obtenez le contenu du tampon en cours et supprimer le tampon de sortie courant

ob_get_flush:

ob_get_flush - Vider le tampon de sortie, le renvoyer sous la forme d'une chaîne et désactiver la mise en tampon de sortie

Dans ce cas, "flush" signifie "send to stdout".

file_put_contents(
    __DIR__ . '/' . str_replace('.md', '.html', $argv[1]), 
    ob_get_clean() 
); 
+0

Merci! Si facile à trouver, aurait dû me figurer. – moonwave99

Questions connexes