1--TEST--
2Test fnmatch() function: Variations
3--SKIPIF--
4<?php
5if (!function_exists('fnmatch'))
6    die("skip fnmatch() function is not available");
7?>
8--FILE--
9<?php
10/* Prototype: bool fnmatch ( string $pattern, string $string [, int $flags] )
11   Description: fnmatch() checks if the passed string would match
12     the given shell wildcard pattern.
13*/
14
15echo "*** Testing fnmatch() with file and various patterns ***\n";
16$file_name = dirname(__FILE__)."/match.tmp";
17
18/* avoid using \, it breaks the pattern */
19if (substr(PHP_OS, 0, 3) == 'WIN') {
20    $file_name = str_replace('\\','/', $file_name);
21}
22
23fopen($file_name, "w");
24
25$pattern_arr = array(
260 => "*.tmp",
271 => "match*",
282 => "mat*",
293 => "mat*tmp",
304 => "m*t",
315 => "ma[pt]ch*",
326 => "*.t*",
337 => "***.tmp",
348 => "match**",
359 => "*.t*p",
3610 => "",
3711 => "match",
3812 => ".tmp",
3913 => "?match",
4014 => "match?tmp",
4115 => "?tmp",
4216 => "match?",
4317 => "?match?",
4418 => "match.tmp",
4519 => "/match.tmp",
4620 => "/match.tmp/",
4721 => 'match.tmp',
4822 => 'match.tmp\0',
4923 => "match.tmp\0",
5024 => "match\0.tmp",
5125 => chr(109).chr(97)."tch.tmp",
5226 => chr(109).chr(97).chr(116).chr(99).chr(104).".tmp",
5327 => chr(109).chr(97).chr(116).chr(99).chr(104).chr(46).chr(116).chr(120).chr(116),
5428 => chr(109).chr(97).chr(116).chr(99).chr(104).".".chr(116).chr(120).chr(116),
5529 => "MATCH.TMP",
5630 => "MATCH*",
5731 => $file_name,
58
59/* binary inputs */
6032 => b"match*",
6133 => b"*.tmp",
6234 => b"mat*",
6335 => b"mat*tmp",
6436 => b"m*t",
65);
66
67for( $i = 0; $i<count($pattern_arr); $i++ ) {
68  echo "-- Iteration $i --\n";
69  var_dump( fnmatch($pattern_arr[$i], $file_name) );
70}
71unlink($file_name);
72
73
74echo "\n*** Testing fnmatch() with other types other than files ***";
75
76/* defining a common function */
77function match( $pattern, $string ) {
78  for( $i = 0; $i<count($pattern); $i++ ) {
79    echo "-- Iteration $i --\n";
80    for( $j = 0; $j<count($string); $j++ ) {
81    var_dump( fnmatch($pattern[$i], $string[$j]) );
82    }
83  }
84}
85
86echo "\n--- With Integers ---\n";
87$int_arr = array(
88  16,
89  16.00,
90  020,
91  020.00,
92  0xF,
93  0xF0000
94);
95match($int_arr, $int_arr);
96
97echo "\n--- With Strings ---\n";
98$str_arr = array(
99  "string",
100  "string\0",
101  'string',
102  "str\0ing",
103  "stringstring",
104
105  /* binary input */
106  b"string"
107);
108match($str_arr, $str_arr);
109
110echo "\n--- With booleans ---\n";
111$bool_arr = array(
112  TRUE,
113  true,
114  1,
115  10,
116  FALSE,
117  false,
118  0,
119  "",
120  "string"
121);
122match($bool_arr, $bool_arr);
123
124echo "\n--- With NULL ---\n";
125$null_arr = array(
126  NULL,
127  null,
128  "",
129  "\0",
130  "string",
131  0
132);
133match($null_arr, $null_arr);
134
135echo "\n*** Done ***\n";
136?>
137--EXPECT--
138*** Testing fnmatch() with file and various patterns ***
139-- Iteration 0 --
140bool(true)
141-- Iteration 1 --
142bool(false)
143-- Iteration 2 --
144bool(false)
145-- Iteration 3 --
146bool(false)
147-- Iteration 4 --
148bool(false)
149-- Iteration 5 --
150bool(false)
151-- Iteration 6 --
152bool(true)
153-- Iteration 7 --
154bool(true)
155-- Iteration 8 --
156bool(false)
157-- Iteration 9 --
158bool(true)
159-- Iteration 10 --
160bool(false)
161-- Iteration 11 --
162bool(false)
163-- Iteration 12 --
164bool(false)
165-- Iteration 13 --
166bool(false)
167-- Iteration 14 --
168bool(false)
169-- Iteration 15 --
170bool(false)
171-- Iteration 16 --
172bool(false)
173-- Iteration 17 --
174bool(false)
175-- Iteration 18 --
176bool(false)
177-- Iteration 19 --
178bool(false)
179-- Iteration 20 --
180bool(false)
181-- Iteration 21 --
182bool(false)
183-- Iteration 22 --
184bool(false)
185-- Iteration 23 --
186bool(false)
187-- Iteration 24 --
188bool(false)
189-- Iteration 25 --
190bool(false)
191-- Iteration 26 --
192bool(false)
193-- Iteration 27 --
194bool(false)
195-- Iteration 28 --
196bool(false)
197-- Iteration 29 --
198bool(false)
199-- Iteration 30 --
200bool(false)
201-- Iteration 31 --
202bool(true)
203-- Iteration 32 --
204bool(false)
205-- Iteration 33 --
206bool(true)
207-- Iteration 34 --
208bool(false)
209-- Iteration 35 --
210bool(false)
211-- Iteration 36 --
212bool(false)
213
214*** Testing fnmatch() with other types other than files ***
215--- With Integers ---
216-- Iteration 0 --
217bool(true)
218bool(true)
219bool(true)
220bool(false)
221bool(false)
222bool(false)
223-- Iteration 1 --
224bool(true)
225bool(true)
226bool(true)
227bool(false)
228bool(false)
229bool(false)
230-- Iteration 2 --
231bool(true)
232bool(true)
233bool(true)
234bool(false)
235bool(false)
236bool(false)
237-- Iteration 3 --
238bool(false)
239bool(false)
240bool(false)
241bool(true)
242bool(false)
243bool(false)
244-- Iteration 4 --
245bool(false)
246bool(false)
247bool(false)
248bool(false)
249bool(true)
250bool(false)
251-- Iteration 5 --
252bool(false)
253bool(false)
254bool(false)
255bool(false)
256bool(false)
257bool(true)
258
259--- With Strings ---
260-- Iteration 0 --
261bool(true)
262bool(false)
263bool(true)
264bool(false)
265bool(false)
266bool(true)
267-- Iteration 1 --
268bool(false)
269bool(false)
270bool(false)
271bool(false)
272bool(false)
273bool(false)
274-- Iteration 2 --
275bool(true)
276bool(false)
277bool(true)
278bool(false)
279bool(false)
280bool(true)
281-- Iteration 3 --
282bool(false)
283bool(false)
284bool(false)
285bool(false)
286bool(false)
287bool(false)
288-- Iteration 4 --
289bool(false)
290bool(false)
291bool(false)
292bool(false)
293bool(true)
294bool(false)
295-- Iteration 5 --
296bool(true)
297bool(false)
298bool(true)
299bool(false)
300bool(false)
301bool(true)
302
303--- With booleans ---
304-- Iteration 0 --
305bool(true)
306bool(true)
307bool(true)
308bool(false)
309bool(false)
310bool(false)
311bool(false)
312bool(false)
313bool(false)
314-- Iteration 1 --
315bool(true)
316bool(true)
317bool(true)
318bool(false)
319bool(false)
320bool(false)
321bool(false)
322bool(false)
323bool(false)
324-- Iteration 2 --
325bool(true)
326bool(true)
327bool(true)
328bool(false)
329bool(false)
330bool(false)
331bool(false)
332bool(false)
333bool(false)
334-- Iteration 3 --
335bool(false)
336bool(false)
337bool(false)
338bool(true)
339bool(false)
340bool(false)
341bool(false)
342bool(false)
343bool(false)
344-- Iteration 4 --
345bool(false)
346bool(false)
347bool(false)
348bool(false)
349bool(true)
350bool(true)
351bool(false)
352bool(true)
353bool(false)
354-- Iteration 5 --
355bool(false)
356bool(false)
357bool(false)
358bool(false)
359bool(true)
360bool(true)
361bool(false)
362bool(true)
363bool(false)
364-- Iteration 6 --
365bool(false)
366bool(false)
367bool(false)
368bool(false)
369bool(false)
370bool(false)
371bool(true)
372bool(false)
373bool(false)
374-- Iteration 7 --
375bool(false)
376bool(false)
377bool(false)
378bool(false)
379bool(true)
380bool(true)
381bool(false)
382bool(true)
383bool(false)
384-- Iteration 8 --
385bool(false)
386bool(false)
387bool(false)
388bool(false)
389bool(false)
390bool(false)
391bool(false)
392bool(false)
393bool(true)
394
395--- With NULL ---
396-- Iteration 0 --
397bool(true)
398bool(true)
399bool(true)
400bool(false)
401bool(false)
402bool(false)
403-- Iteration 1 --
404bool(true)
405bool(true)
406bool(true)
407bool(false)
408bool(false)
409bool(false)
410-- Iteration 2 --
411bool(true)
412bool(true)
413bool(true)
414bool(false)
415bool(false)
416bool(false)
417-- Iteration 3 --
418bool(false)
419bool(false)
420bool(false)
421bool(false)
422bool(false)
423bool(false)
424-- Iteration 4 --
425bool(false)
426bool(false)
427bool(false)
428bool(false)
429bool(true)
430bool(false)
431-- Iteration 5 --
432bool(false)
433bool(false)
434bool(false)
435bool(false)
436bool(false)
437bool(true)
438
439*** Done ***
440