1--TEST--
2Test file() function : third parameter variation
3--FILE--
4<?php
5/* Prototype  : array file(string filename [, int flags[, resource context]])
6 * Description: Read entire file into an array
7 * Source code: ext/standard/file.c
8 * Alias to functions:
9 */
10
11echo "*** Testing file() : usage variation ***\n";
12
13// Define error handler
14function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
15	if (error_reporting() != 0) {
16		// report non-silenced errors
17		echo "Error: $err_no - $err_msg, $filename($linenum)\n";
18	}
19}
20set_error_handler('test_error_handler');
21
22// Initialise function arguments not being substituted
23$filename = __FILE__ . ".tmp";
24$fd = fopen($filename, "w+");
25fwrite($fd, "Line 1\nLine 2\nLine 3");
26fclose($fd);
27
28$flags = 0;
29
30//get an unset variable
31$unset_var = 10;
32unset ($unset_var);
33
34// define some classes
35class classWithToString
36{
37	public function __toString() {
38		return "Class A object";
39	}
40}
41
42class classWithoutToString
43{
44}
45
46// heredoc string
47$heredoc = <<<EOT
48hello world
49EOT;
50
51// add arrays
52$index_array = array (1, 2, 3);
53$assoc_array = array ('one' => 1, 'two' => 2);
54
55// create a file stream resource
56$tmp_filename = __FILE__ . ".tmp2";
57$file_stream_resource = fopen($tmp_filename, "w+");
58
59//array of values to iterate over
60$inputs = array(
61
62      // int data
63      'int 0' => 0,
64      'int 1' => 1,
65      'int 12345' => 12345,
66      'int -12345' => -2345,
67
68      // float data
69      'float 10.5' => 10.5,
70      'float -10.5' => -10.5,
71      'float 12.3456789000e10' => 12.3456789000e10,
72      'float -12.3456789000e10' => -12.3456789000e10,
73      'float .5' => .5,
74
75      // array data
76      'empty array' => array(),
77      'int indexed array' => $index_array,
78      'associative array' => $assoc_array,
79      'nested arrays' => array('foo', $index_array, $assoc_array),
80
81      // null data
82      'uppercase NULL' => NULL,
83      'lowercase null' => null,
84
85      // boolean data
86      'lowercase true' => true,
87      'lowercase false' =>false,
88      'uppercase TRUE' =>TRUE,
89      'uppercase FALSE' =>FALSE,
90
91      // empty data
92      'empty string DQ' => "",
93      'empty string SQ' => '',
94
95      // string data
96      'string DQ' => "string",
97      'string SQ' => 'string',
98      'mixed case string' => "sTrInG",
99      'heredoc' => $heredoc,
100
101      // object data
102      'instance of classWithToString' => new classWithToString(),
103      'instance of classWithoutToString' => new classWithoutToString(),
104
105      // undefined data
106      'undefined var' => @$undefined_var,
107
108      // unset data
109      'unset var' => @$unset_var,
110
111      // file stream resource
112      'file stream resource' => $file_stream_resource,
113);
114
115// loop through each element of the array for context
116
117foreach($inputs as $key =>$value) {
118      echo "\n--$key--\n";
119      var_dump( file($filename, $flags, $value) );
120};
121
122fclose($file_stream_resource);
123unlink($tmp_filename);
124unlink($filename);
125
126?>
127===DONE===
128--EXPECTF--
129*** Testing file() : usage variation ***
130
131--int 0--
132Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
133NULL
134
135--int 1--
136Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
137NULL
138
139--int 12345--
140Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
141NULL
142
143--int -12345--
144Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
145NULL
146
147--float 10.5--
148Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
149NULL
150
151--float -10.5--
152Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
153NULL
154
155--float 12.3456789000e10--
156Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
157NULL
158
159--float -12.3456789000e10--
160Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
161NULL
162
163--float .5--
164Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
165NULL
166
167--empty array--
168Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
169NULL
170
171--int indexed array--
172Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
173NULL
174
175--associative array--
176Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
177NULL
178
179--nested arrays--
180Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
181NULL
182
183--uppercase NULL--
184array(3) {
185  [0]=>
186  string(7) "Line 1
187"
188  [1]=>
189  string(7) "Line 2
190"
191  [2]=>
192  string(6) "Line 3"
193}
194
195--lowercase null--
196array(3) {
197  [0]=>
198  string(7) "Line 1
199"
200  [1]=>
201  string(7) "Line 2
202"
203  [2]=>
204  string(6) "Line 3"
205}
206
207--lowercase true--
208Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
209NULL
210
211--lowercase false--
212Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
213NULL
214
215--uppercase TRUE--
216Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
217NULL
218
219--uppercase FALSE--
220Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
221NULL
222
223--empty string DQ--
224Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
225NULL
226
227--empty string SQ--
228Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
229NULL
230
231--string DQ--
232Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
233NULL
234
235--string SQ--
236Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
237NULL
238
239--mixed case string--
240Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
241NULL
242
243--heredoc--
244Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
245NULL
246
247--instance of classWithToString--
248Error: 2 - file() expects parameter 3 to be resource, object given, %s(%d)
249NULL
250
251--instance of classWithoutToString--
252Error: 2 - file() expects parameter 3 to be resource, object given, %s(%d)
253NULL
254
255--undefined var--
256array(3) {
257  [0]=>
258  string(7) "Line 1
259"
260  [1]=>
261  string(7) "Line 2
262"
263  [2]=>
264  string(6) "Line 3"
265}
266
267--unset var--
268array(3) {
269  [0]=>
270  string(7) "Line 1
271"
272  [1]=>
273  string(7) "Line 2
274"
275  [2]=>
276  string(6) "Line 3"
277}
278
279--file stream resource--
280Error: 2 - file(): supplied resource is not a valid Stream-Context resource, %s(%d)
281array(3) {
282  [0]=>
283  string(7) "Line 1
284"
285  [1]=>
286  string(7) "Line 2
287"
288  [2]=>
289  string(6) "Line 3"
290}
291===DONE===
292