}
/* }}} */
+/* {{{ stderr writer if not PHP_OUTPUT_ACTIVATED */
+static int php_output_stderr(const char *str, size_t str_len)
+{
+ fwrite(str, 1, str_len, stderr);
+/* See http://support.microsoft.com/kb/190351 */
+#ifdef PHP_WIN32
+ fflush(stderr);
+#endif
+ return str_len;
+}
+/* }}} */
+
/* {{{ void php_output_startup(void)
* Set up module globals and initalize the conflict and reverse conflict hash tables */
PHPAPI void php_output_startup(void)
#endif
zend_stack_init(&OG(handlers));
+ OG(flags) |= PHP_OUTPUT_ACTIVATED;
return SUCCESS;
}
}
zend_stack_destroy(&OG(handlers));
}
+
+ OG(flags) ^= PHP_OUTPUT_ACTIVATED;
}
/* }}} */
* Get output control status */
PHPAPI int php_output_get_status(TSRMLS_D)
{
- return OG(flags)
- | (OG(active) ? PHP_OUTPUT_ACTIVE : 0)
- | (OG(running)? PHP_OUTPUT_LOCKED : 0);
+ return (
+ OG(flags)
+ | (OG(active) ? PHP_OUTPUT_ACTIVE : 0)
+ | (OG(running)? PHP_OUTPUT_LOCKED : 0)
+ ) & 0xff;
}
/* }}} */
if (OG(flags) & PHP_OUTPUT_DISABLED) {
return 0;
}
- return sapi_module.ub_write(str, len TSRMLS_CC);
+ if (OG(flags) & PHP_OUTPUT_ACTIVATED) {
+ return sapi_module.ub_write(str, len TSRMLS_CC);
+ }
+ return php_output_stderr(str, len);
}
/* }}} */
if (OG(flags) & PHP_OUTPUT_DISABLED) {
return 0;
}
- php_output_op(PHP_OUTPUT_HANDLER_WRITE, str, len TSRMLS_CC);
- return (int) len;
+ if (OG(flags) & PHP_OUTPUT_ACTIVATED) {
+ php_output_op(PHP_OUTPUT_HANDLER_WRITE, str, len TSRMLS_CC);
+ return (int) len;
+ }
+ return php_output_stderr(str, len);
}
/* }}} */
/* supplementary flags for php_output_get_status() */
#define PHP_OUTPUT_ACTIVE 0x10
#define PHP_OUTPUT_LOCKED 0x20
+/* output layer is ready to use */
+#define PHP_OUTPUT_ACTIVATED 0x100000
/* handler hooks */
typedef enum _php_output_handler_hook_t {