From: Wez Furlong Date: Wed, 8 Oct 2003 10:07:25 +0000 (+0000) Subject: Implement stream_get_contents, which is somewhat akin to file_get_contents, X-Git-Tag: RELEASE_1_3b3~91 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=628afb40b638c635d70adbbde55a04c26c07ea08;p=php Implement stream_get_contents, which is somewhat akin to file_get_contents, except that it works on an already opened stream. --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 34e99c0d91..6a3ebbb82d 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -715,6 +715,7 @@ function_entry basic_functions[] = { PHP_FE(stream_socket_accept, third_arg_force_ref) PHP_FE(stream_socket_get_name, NULL) PHP_FE(stream_copy_to_stream, NULL) + PHP_FE(stream_get_contents, NULL) PHP_FE(fgetcsv, NULL) PHP_FE(flock, NULL) PHP_FE(get_meta_tags, NULL) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index e6db9e8138..c0af60d895 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -266,6 +266,38 @@ PHP_FUNCTION(stream_socket_get_name) } /* }}} */ +/* {{{ proto long stream_get_contents(resource source [, long maxlen ]) + Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string. */ +PHP_FUNCTION(stream_get_contents) +{ + php_stream *stream; + zval *zsrc; + long maxlen = PHP_STREAM_COPY_ALL; + int len, newlen; + char *contents = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zsrc, &maxlen) == FAILURE) { + RETURN_FALSE; + } + + php_stream_from_zval(stream, &zsrc); + + if ((len = php_stream_copy_to_mem(stream, &contents, maxlen, 0)) > 0) { + + if (PG(magic_quotes_runtime)) { + contents = php_addslashes(contents, len, &newlen, 1 TSRMLS_CC); /* 1 = free source string */ + len = newlen; + } + + RETVAL_STRINGL(contents, len, 0); + } else if (len == 0) { + RETVAL_EMPTY_STRING(); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + /* {{{ proto long stream_copy_to_stream(resource source, resource dest [, long maxlen ]) Reads up to maxlen bytes from source stream and writes them to dest stream. */ PHP_FUNCTION(stream_copy_to_stream) diff --git a/ext/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h index bcd6870c94..8b308985e2 100644 --- a/ext/standard/streamsfuncs.h +++ b/ext/standard/streamsfuncs.h @@ -28,6 +28,7 @@ PHP_FUNCTION(stream_socket_accept); PHP_FUNCTION(stream_socket_get_name); PHP_FUNCTION(stream_copy_to_stream); +PHP_FUNCTION(stream_get_contents); PHP_FUNCTION(set_socket_blocking); /* deprecated */ PHP_FUNCTION(stream_set_blocking);