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