mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Implement stream_get_contents, which is somewhat akin to file_get_contents,
except that it works on an already opened stream.
This commit is contained in:
parent
ed40a56c6c
commit
628afb40b6
3 changed files with 34 additions and 0 deletions
|
@ -715,6 +715,7 @@ function_entry basic_functions[] = {
|
||||||
PHP_FE(stream_socket_accept, third_arg_force_ref)
|
PHP_FE(stream_socket_accept, third_arg_force_ref)
|
||||||
PHP_FE(stream_socket_get_name, NULL)
|
PHP_FE(stream_socket_get_name, NULL)
|
||||||
PHP_FE(stream_copy_to_stream, NULL)
|
PHP_FE(stream_copy_to_stream, NULL)
|
||||||
|
PHP_FE(stream_get_contents, NULL)
|
||||||
PHP_FE(fgetcsv, NULL)
|
PHP_FE(fgetcsv, NULL)
|
||||||
PHP_FE(flock, NULL)
|
PHP_FE(flock, NULL)
|
||||||
PHP_FE(get_meta_tags, NULL)
|
PHP_FE(get_meta_tags, NULL)
|
||||||
|
|
|
@ -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 ])
|
/* {{{ 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. */
|
Reads up to maxlen bytes from source stream and writes them to dest stream. */
|
||||||
PHP_FUNCTION(stream_copy_to_stream)
|
PHP_FUNCTION(stream_copy_to_stream)
|
||||||
|
|
|
@ -28,6 +28,7 @@ PHP_FUNCTION(stream_socket_accept);
|
||||||
PHP_FUNCTION(stream_socket_get_name);
|
PHP_FUNCTION(stream_socket_get_name);
|
||||||
|
|
||||||
PHP_FUNCTION(stream_copy_to_stream);
|
PHP_FUNCTION(stream_copy_to_stream);
|
||||||
|
PHP_FUNCTION(stream_get_contents);
|
||||||
|
|
||||||
PHP_FUNCTION(set_socket_blocking); /* deprecated */
|
PHP_FUNCTION(set_socket_blocking); /* deprecated */
|
||||||
PHP_FUNCTION(stream_set_blocking);
|
PHP_FUNCTION(stream_set_blocking);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue