]> granicus.if.org Git - php/commitdiff
Fix default behavior of file() (FILE_TEXT flag is the default)
authorArnaud Le Blanc <lbarnaud@php.net>
Fri, 8 May 2009 10:01:40 +0000 (10:01 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Fri, 8 May 2009 10:01:40 +0000 (10:01 +0000)
ext/standard/file.c
ext/standard/tests/file/file_variation10.phpt [new file with mode: 0644]

index 38e18ea9f5c61a7e849d21158fa0bd617b82d4a2..aba764434e5cef01b2b1299a01841d19a0130e95 100644 (file)
@@ -779,7 +779,6 @@ PHP_FUNCTION(file_put_contents)
 
 /* {{{ proto array file(string filename [, int flags[, resource context]]) U
    Read entire file into an array */
-/* UTODO: Accept unicode contents */
 PHP_FUNCTION(file)
 {
        zval **ppfilename;
@@ -801,7 +800,7 @@ PHP_FUNCTION(file)
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lr!", &ppfilename, &flags, &zcontext) == FAILURE) {
                return;
        }
-       if (flags < 0 || flags > (PHP_FILE_USE_INCLUDE_PATH | PHP_FILE_IGNORE_NEW_LINES | PHP_FILE_SKIP_EMPTY_LINES | PHP_FILE_NO_DEFAULT_CONTEXT | PHP_FILE_TEXT)) {
+       if (flags < 0 || flags > (PHP_FILE_USE_INCLUDE_PATH | PHP_FILE_IGNORE_NEW_LINES | PHP_FILE_SKIP_EMPTY_LINES | PHP_FILE_NO_DEFAULT_CONTEXT | PHP_FILE_TEXT | PHP_FILE_BINARY)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%ld' flag is not supported", flags);
                RETURN_FALSE;
        }
@@ -809,7 +808,7 @@ PHP_FUNCTION(file)
        use_include_path = flags & PHP_FILE_USE_INCLUDE_PATH;
        include_new_line = !(flags & PHP_FILE_IGNORE_NEW_LINES);
        skip_blank_lines = flags & PHP_FILE_SKIP_EMPTY_LINES;
-       text_mode = flags & PHP_FILE_TEXT;
+       text_mode = !(flags & PHP_FILE_BINARY);
 
        context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
        if (php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context) == FAILURE) {
diff --git a/ext/standard/tests/file/file_variation10.phpt b/ext/standard/tests/file/file_variation10.phpt
new file mode 100644 (file)
index 0000000..87dfb99
--- /dev/null
@@ -0,0 +1,81 @@
+--TEST--
+file(): FILE_TEXT, FILE_BINARY, and default behavior
+--FILE--
+<?php
+
+$urls = array();
+$urls[] = "data://text/plain,foo\nbar\n";
+$urls[] = "data://text/plain,\nfoo\nbar\n";
+$urls[] = "data://text/plain,foo\nbar";
+
+foreach($urls as $url) {
+       echo strtr($url, array("\r" => "\\r", "\n" => "\\n")) . "\n";
+       var_dump(file($url, FILE_IGNORE_NEW_LINES));
+       var_dump(file($url, FILE_IGNORE_NEW_LINES|FILE_TEXT));
+       var_dump(file($url, FILE_IGNORE_NEW_LINES|FILE_BINARY));
+}
+?>
+--EXPECTF--
+data://text/plain,foo\nbar\n
+array(2) {
+  [0]=>
+  unicode(3) "foo"
+  [1]=>
+  unicode(3) "bar"
+}
+array(2) {
+  [0]=>
+  unicode(3) "foo"
+  [1]=>
+  unicode(3) "bar"
+}
+array(2) {
+  [0]=>
+  string(3) "foo"
+  [1]=>
+  string(3) "bar"
+}
+data://text/plain,\nfoo\nbar\n
+array(3) {
+  [0]=>
+  unicode(0) ""
+  [1]=>
+  unicode(3) "foo"
+  [2]=>
+  unicode(3) "bar"
+}
+array(3) {
+  [0]=>
+  unicode(0) ""
+  [1]=>
+  unicode(3) "foo"
+  [2]=>
+  unicode(3) "bar"
+}
+array(3) {
+  [0]=>
+  string(0) ""
+  [1]=>
+  string(3) "foo"
+  [2]=>
+  string(3) "bar"
+}
+data://text/plain,foo\nbar
+array(2) {
+  [0]=>
+  unicode(3) "foo"
+  [1]=>
+  unicode(3) "bar"
+}
+array(2) {
+  [0]=>
+  unicode(3) "foo"
+  [1]=>
+  unicode(3) "bar"
+}
+array(2) {
+  [0]=>
+  string(3) "foo"
+  [1]=>
+  string(3) "bar"
+}