Req #48421 [Com]: stream_get_line() - allow $length to be optional
| From: | ryan dot brothers at gmail dot com | Date: | Mon, 05 May 2014 02:03:45 +0000 |
| Subject: | Req #48421 [Com]: stream_get_line() - allow $length to be optional | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-185622@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=48421&edit=1
ID: 48421
Comment by: ryan dot brothers at gmail dot com
Reported by: ryan dot brothers at gmail dot com
Summary: stream_get_line() - allow $length to be optional
Status: Feedback
Type: Feature/Change Request
Package: Streams related
Operating System: Irrelevant
PHP Version: Any
Block user comment: N
Private report: N
New Comment:
Yes, this would still be useful to me. I've had to work around it in the meantime. Thanks for
your help.
Previous Comments:
------------------------------------------------------------------------
[2014-04-30 22:48:57] levim@php.net
Is this something you are still interested in seeing?
------------------------------------------------------------------------
[2009-05-28 22:42:24] ryan dot brothers at gmail dot com
Description:
------------
I believe stream_get_line() should allow the $length parameter to be optional by allowing a $length
of -1 that would read the remaining buffer up to either the $ending delimiter or EOF.
Currently if you pass a $length of 0, the $length defaults to PHP_SOCK_CHUNK_SIZE (8192) in
ext/standard/streamsfuncs.c. If you pass a length of -1, a PHP Warning is generated.
Other 'similar' functions that allow length to be optional or -1 are fgets,
stream_get_contents, and file_get_contents.
Also, the manual page for stream_get_line() states that this function is the same fgets() except for
the handling of the delimiter - but another difference, at least right now, is that the $length
parameter is required in stream_get_line(), but optional in fgets().
Reproduce code:
---------------
<?php
$fp = tmpfile();
fwrite($fp, str_repeat('a', 10000));
fseek($fp, 0);
echo strlen(stream_get_line($fp, 0));
fseek($fp, 0);
echo strlen(stream_get_line($fp, -1));
fclose($fp);
Expected result:
----------------
8192
10000
Actual result:
--------------
8192
Warning: stream_get_line(): The maximum allowed length must be greater than or equal to zero
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=48421&edit=1