/* {{{ 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;
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;
}
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) {
--- /dev/null
+--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"
+}