function _search( $p , $d , $a = false )
{
$o = array();
$k = 0;
$dn = basename( $d );
$dp = opendir( $d );
readdir( $dp );
readdir( $dp );
while( $f = readdir( $dp ) )
{
$t = end( split( '/.' , $f ) );
if( isSame( $p , $f ) )
{
$o[$dn][$k]['file'] = $f;
$o[$dn][$k++]['type'] = $t;
}
if( $t == 'dir' )
{
$s = _search( $p , $d.$f , $a );
foreach( $s as $m => $n )
{
for( $i = 0 ; $n[$i] ; $i++ )
{
$o[$dn.'/'.$m][$i] = $n[$i];
}
}
}
}
return( $o );
}
function isSame( $s1 , $s2 )
{
if( !isset( $s1[1] ) )
{
return( true );
}
if( $s1[0] == '*' )
{
while( $s2[0] != $s1[1] && $s2[0] )
{
$s2 = substr( $s2 , 1 );
}
if( !$s2 )
{
return( false );
}
$s2 = '*'.$s2;
}
else if( $s1[0] != $s2[0] && $s1[0] != '?' )
{
return( false );
}
return( isSame( substr( $s1 , 1 ) , substr( $s2 , 1 ) ) );
}
{
$o = array();
$k = 0;
$dn = basename( $d );
$dp = opendir( $d );
readdir( $dp );
readdir( $dp );
while( $f = readdir( $dp ) )
{
$t = end( split( '/.' , $f ) );
if( isSame( $p , $f ) )
{
$o[$dn][$k]['file'] = $f;
$o[$dn][$k++]['type'] = $t;
}
if( $t == 'dir' )
{
$s = _search( $p , $d.$f , $a );
foreach( $s as $m => $n )
{
for( $i = 0 ; $n[$i] ; $i++ )
{
$o[$dn.'/'.$m][$i] = $n[$i];
}
}
}
}
return( $o );
}
function isSame( $s1 , $s2 )
{
if( !isset( $s1[1] ) )
{
return( true );
}
if( $s1[0] == '*' )
{
while( $s2[0] != $s1[1] && $s2[0] )
{
$s2 = substr( $s2 , 1 );
}
if( !$s2 )
{
return( false );
}
$s2 = '*'.$s2;
}
else if( $s1[0] != $s2[0] && $s1[0] != '?' )
{
return( false );
}
return( isSame( substr( $s1 , 1 ) , substr( $s2 , 1 ) ) );
}