logo       

cvs: pecl /http http_response_object.c php_http_response_object.h: msg#00129

php.pecl.cvs

Subject: cvs: pecl /http http_response_object.c php_http_response_object.h

mike Fri Jul 22 11:28:50 2005 EDT

Modified files:
/pecl/http http_response_object.c php_http_response_object.h
Log:
- added capture mode to HttpResponse

http://cvs.php.net/diff.php/pecl/http/http_response_object.c?r1=1.14&r2=1.15&ty=u
Index: pecl/http/http_response_object.c
diff -u pecl/http/http_response_object.c:1.14
pecl/http/http_response_object.c:1.15
--- pecl/http/http_response_object.c:1.14 Fri Jul 22 08:39:12 2005
+++ pecl/http/http_response_object.c Fri Jul 22 11:28:48 2005
@@ -13,7 +13,7 @@
+----------------------------------------------------------------------+
*/

-/* $Id: http_response_object.c,v 1.14 2005/07/22 12:39:12 mike Exp $ */
+/* $Id: http_response_object.c,v 1.15 2005/07/22 15:28:48 mike Exp $ */


#ifdef HAVE_CONFIG_H
@@ -109,6 +109,8 @@
HTTP_ARG_VAL(clean_ob, 0)
HTTP_END_ARGS;

+HTTP_EMPTY_ARGS(capture, 0);
+
#define http_response_object_declare_default_properties()
_http_response_object_declare_default_properties(TSRMLS_C)
static inline void _http_response_object_declare_default_properties(TSRMLS_D);

@@ -149,6 +151,7 @@
HTTP_RESPONSE_ME(getStream, ZEND_ACC_PUBLIC)

HTTP_RESPONSE_ME(send, ZEND_ACC_PUBLIC)
+ HTTP_RESPONSE_ME(capture, ZEND_ACC_PUBLIC)

{NULL, NULL, NULL}
};
@@ -599,7 +602,7 @@
*/
PHP_METHOD(HttpResponse, send)
{
- zval *do_cache, *do_gzip;
+ zval *do_cache, *do_gzip, *sent;
zend_bool clean_ob = 1;

if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b",
&clean_ob)) {
@@ -609,6 +612,32 @@
http_error(E_WARNING, HTTP_E_HEADER, "Cannot send HttpResponse,
headers have already been sent");
RETURN_FALSE;
}
+
+ sent = GET_STATIC_PROP(sent);
+ if (Z_LVAL_P(sent)) {
+ http_error(E_WARNING, HTTP_E_UNKOWN, "Cannot send HttpResponse,
response has already been sent");
+ } else {
+ Z_LVAL_P(sent) = 1;
+ }
+
+ /* capture mode */
+ if (Z_LVAL_P(GET_STATIC_PROP(catch))) {
+ zval the_data;
+
+ INIT_PZVAL(&the_data);
+ php_ob_get_buffer(&the_data TSRMLS_CC);
+
+ USE_STATIC_PROP();
+ SET_STATIC_PROP(data, &the_data);
+ ZVAL_LONG(GET_STATIC_PROP(mode), SEND_DATA);
+
+ if (!Z_STRLEN_P(GET_STATIC_PROP(eTag))) {
+ SET_STATIC_PROP_STRING(eTag,
http_etag(Z_STRVAL(the_data), Z_STRLEN(the_data), SEND_DATA), 0);
+ }
+ zval_dtor(&the_data);
+
+ clean_ob = 1;
+ }

if (clean_ob) {
/* interrupt on-the-fly etag generation */
@@ -701,6 +730,43 @@
}
/* }}} */

+/* {{{ proto void HttpResponse::capture()
+ *
+ * Capture script output.
+ */
+PHP_METHOD(HttpResponse, capture)
+{
+ zval do_catch;
+
+ NO_ARGS;
+
+ INIT_PZVAL(&do_catch);
+ ZVAL_LONG(&do_catch, 1);
+ USE_STATIC_PROP();
+ SET_STATIC_PROP(catch, &do_catch);
+
+ php_end_ob_buffers(0 TSRMLS_CC);
+ php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC);
+
+ /* register shutdown function */
+ {
+ zval func, retval, arg, *argp[1];
+
+ INIT_PZVAL(&arg);
+ INIT_PZVAL(&func);
+ INIT_PZVAL(&retval);
+ ZVAL_STRINGL(&func, "register_shutdown_function",
lenof("register_shutdown_function"), 0);
+
+ array_init(&arg);
+ add_next_index_stringl(&arg, "HttpResponse",
lenof("HttpResponse"), 1);
+ add_next_index_stringl(&arg, "send", lenof("send"), 1);
+ argp[0] = &arg;
+ call_user_function(EG(function_table), NULL, &func, &retval, 1,
argp TSRMLS_CC);
+ zval_dtor(&arg);
+ }
+}
+/* }}} */
+
#endif /* ZEND_ENGINE_2 */

/*
http://cvs.php.net/diff.php/pecl/http/php_http_response_object.h?r1=1.4&r2=1.5&ty=u
Index: pecl/http/php_http_response_object.h
diff -u pecl/http/php_http_response_object.h:1.4
pecl/http/php_http_response_object.h:1.5
--- pecl/http/php_http_response_object.h:1.4 Wed Jul 20 11:01:27 2005
+++ pecl/http/php_http_response_object.h Fri Jul 22 11:28:48 2005
@@ -13,7 +13,7 @@
+----------------------------------------------------------------------+
*/

-/* $Id: php_http_response_object.h,v 1.4 2005/07/20 15:01:27 mike Exp $ */
+/* $Id: php_http_response_object.h,v 1.5 2005/07/22 15:28:48 mike Exp $ */

#ifndef PHP_HTTP_RESPONSE_OBJECT_H
#define PHP_HTTP_RESPONSE_OBJECT_H
@@ -48,6 +48,7 @@
PHP_METHOD(HttpResponse, setStream);
PHP_METHOD(HttpResponse, getStream);
PHP_METHOD(HttpResponse, send);
+PHP_METHOD(HttpResponse, capture);

#endif
#endif



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise