2010-07-19 4 views
1

J'ai la fonction C++ suivante:stdout de l'extension PHP généré SWIG

void foo() { 
    std::cout << "bar" << std::endl; 
} 

Je portage à PHP via ce SWIG. Tout compile bien et l'extension se charge correctement. Je suis en mesure d'appeler foo() à partir de PHP, mais je ne vois que la sortie bar si je cours le script PHP à partir de la ligne de commande.

$ php script.php 
bar 

Si je charge le script dans le navigateur, rien ne s'affiche. Pourquoi ne montre-t-il pas bar dans ce cas?

+0

Très probablement PHP redéfinit sa sortie quelque part. Cela étant dit: avoir la fonction juste abuser stdout est très irritant en php, ne pouvez-vous pas juste renvoyer une chaîne, et laisser à l'utilisateur PHP de décider si 'echo' ou de continuer à manipuler un retour? Tous ces ob_starts forcés() me rendent fou :) – Wrikken

Répondre

1

Vous ne pouvez pas imprimer directement sur la sortie stdout. Cela ne fonctionnera bien sûr que si vous utilisez le CLI SAPI. Utilisez php_printf ou l'un de ceux-ci:

//Calls php_output_write 
#define PHPWRITE(str, str_len) 
//Calls php_output_write_unbuffered 
#define PHPWRITE_H(str, str_len) 
//Idem: 
#define PUTC(c) 
#define PUTC_H(c) 
#define PUTS(str) 
#define PUTS_H(str) 
int php_write(void *buf, uint size TSRMLS_DC); 
int php_printf(const char *format, ...); 
int php_output_write(const char *str, size_t len TSRMLS_DC); 
int php_output_write_unbuffered(const char *str, size_t len TSRMLS_DC); 
//see the rest of main/output.c