Edit report at https://bugs.php.net/bug.php?id=41315&edit=1

 ID:                 41315
 Comment by:         theanomaly dot is at gmail dot com
 Reported by:        cschneid at cschneid dot com
 Summary:            file() should support FILE_SKIP_EMPTY_LINES without
                     FILE_IGNORE_NEW_LINES
 Status:             Open
 Type:               Feature/Change Request
 Package:            Feature/Change Request
 PHP Version:        5.2.2
 Block user comment: N
 Private report:     N

 New Comment:

The reason FILE_SKIP_EMPTY_LINES doesn't skip any lines without using it in 
combination with FILE_IGNORE_NEW_LINES is because to PHP the lines still aren't 
empty until they amount to a 0 length string. With the EOL character (or 
characters in the case of CRLF) still a part of the string the lines will 
remain 
a part of the returned array from file().

However, since this technically doesn't break any BC (given that the 
FILE_SKIP_EMPTY_LINES flag doesn't do anything without FILE_IGNORE_NEW_LINES) I 
don't see why it would be a bad idea to support this when the only thing 
remaining on the line is the EOL.

I've offered to submit this as a feature request instead and will also submit a 
patch for the documentation to clarify this behavior.

https://github.com/php/php-src/pull/80


Previous Comments:
------------------------------------------------------------------------
[2007-05-07 16:19:48] cschneid at cschneid dot com

Description:
------------
Currently file() only skips (FILE_SKIP_EMPTY_LINES) when also using      
FILE_IGNORE_NEW_LINES at the same time. I think it would be      
preferable if it would work without that flag too, ignoring lines      
only consisting of a newline.     
 
Patch  
diff -u -r1.409.2.6.2.17 file.c 
--- ext/standard/file.c 23 Feb 2007 16:22:20 -0000      
1.409.2.6.2.17 
+++ ext/standard/file.c 7 May 2007 16:17:27 -0000 
@@ -750,6 +750,10 @@ 
                        do { 
                                p++; 
 parse_eol: 
+                               if (skip_blank_lines && (p-s == 1) 
&& (*s == eol_marker)) { 
+                                       s = p; 
+                                       continue; 
+                               } 
                                if (PG(magic_quotes_runtime)) { 
                                        /* s is in target_buf which 
is freed at the end of the function */ 
                                        slashed = php_addslashes(s, 
(p-s), &len, 0 TSRMLS_CC); 
 

Reproduce code:
---------------
Input file x:
a   
   
b

Code:
var_dump(file("x", FILE_SKIP_EMPTY_LINES));

Expected result:
----------------
a 
b 
 

Actual result:
--------------
a 
 
b 
 


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=41315&edit=1

Reply via email to