diff options
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/basic_functions.c | 1 | ||||
-rw-r--r-- | ext/standard/file.c | 31 | ||||
-rw-r--r-- | ext/standard/file.h | 1 |
3 files changed, 33 insertions, 0 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index dd743bd79d..5c2f1880a4 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -681,6 +681,7 @@ function_entry basic_functions[] = { PHP_FALIAS(socket_set_blocking, stream_set_blocking, NULL) PHP_FE(stream_get_meta_data, NULL) + PHP_FE(stream_get_line, NULL) PHP_FE(stream_register_wrapper, NULL) PHP_FE(stream_get_wrappers, NULL) PHP_FE(get_headers, NULL) diff --git a/ext/standard/file.c b/ext/standard/file.c index b369ed179e..af486081b6 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1128,6 +1128,37 @@ PHP_FUNCTION(stream_filter_append) apply_filter_to_stream(1, INTERNAL_FUNCTION_PARAM_PASSTHRU); } /* }}} */ + +/* {{{ proto string stream_get_line(resource stream, int maxlen, string ending) + Read up to maxlen bytes from a stream or until the ending string is found */ +PHP_FUNCTION(stream_get_line) +{ + char *str; + int str_len; + long max_length; + zval *zstream; + char *buf; + size_t buf_size; + php_stream *stream; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &zstream, &max_length, &str, &str_len) == FAILURE) { + RETURN_FALSE; + } + + if (max_length < 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "The maximum allowed length must be greater then or equal to zero."); + RETURN_FALSE; + } + + php_stream_from_zval(stream, &zstream); + + if ((buf = php_stream_get_record(stream, max_length, &buf_size, str, str_len TSRMLS_CC))) { + RETURN_STRINGL(buf, buf_size, 0); + } else { + RETURN_FALSE; + } +} + /* }}} */ /* {{{ proto resource fopen(string filename, string mode [, bool use_include_path [, resource context]]) diff --git a/ext/standard/file.h b/ext/standard/file.h index 28fca3b304..ae379cb6a1 100644 --- a/ext/standard/file.h +++ b/ext/standard/file.h @@ -60,6 +60,7 @@ PHP_FUNCTION(stream_select); PHP_FUNCTION(stream_set_timeout); PHP_FUNCTION(stream_set_write_buffer); PHP_FUNCTION(stream_get_wrappers); +PHP_FUNCTION(stream_get_line); PHP_FUNCTION(get_meta_tags); PHP_FUNCTION(flock); PHP_FUNCTION(fd_set); |