стандартный вывод из сгенерированного SWIG расширения PHP - PullRequest
1 голос
/ 19 июля 2010

У меня есть следующая функция C ++:

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

Я портирую это на PHP через SWIG. Все отлично компилируется и расширение загружается правильно. Я могу вызвать foo() из PHP, но я вижу вывод bar, только если я запускаю сценарий PHP из командной строки.

$ php script.php
bar

Если я загружаю скрипт в браузер, ничего не появляется. Почему в этом случае не отображается bar?

1 Ответ

1 голос
/ 27 июля 2010

Вы не можете печатать на стандартный вывод напрямую. Это, конечно, будет работать, только если вы используете CLI SAPI. Используйте php_printf или любой из них:

//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
...