<?
    $ignoreFiles 
= array( "." );

    function 
arrayInsert( &$array$value$index )
    {
        if( ! 
is_array$array ) )
            return 
FALSE;

        if( 
$index sizeof$array ) )
            
$index sizeof$array );

        
$size sizeof$array );
        for( 
$i $size$i $index$i-- )
            
$array[$i] = $array[$i 1];

        
$array[$index] = $value;

        return 
TRUE;
    }

    function 
arrayPlace( &$array$value$key$order "A" )
    {
        for( 
$i 0$i sizeof$array ); $i++ )
        {
            if( 
$order == "A" && strcasecmp$array[$i][$key], $value[$key] ) > ) break;
            if( 
$order == "D" && strcasecmp$array[$i][$key], $value[$key] ) < ) break;
        }

        
arrayInsert$array$value$i );
    }

    function 
urlDoEncode$url )
    {
        return 
str_replace"%2F""/"rawurlencode$url ) );
    }

    function 
urlDoDecode$url )
    {
        return 
str_replace"%2F""/"rawurldecode$url ) );
    }

    if( ! 
in_array$key, array( "name""date""size" ) ) )
    {
        
$key "name";
    }
    if( ! 
in_array$order, array( "A""D" ) ) )
    {
        
$order "A";
    }

    
$request urlDoDecode$REQUEST_URI );
    if( 
$pos strpos$request"?" ) )
        
$request substr$request0$pos );
    
$request preg_replace"'[^/]+/\.\.'"""$request );
    
$request preg_replace"'[/]+'""/"$request );
    
$request preg_replace"'[/]+$'"""$request );
    
$offset substr$requeststrlen$SCRIPT_NAME ) + );
    
$offset preg_replace"'^[/]+'"""$offset );

    
$urlPath preg_replace"'\/".basename$SCRIPT_NAME )."$'"""$SCRIPT_NAME );
    
$dirPath preg_replace"'\/".basename$SCRIPT_FILENAME )."$'"""$SCRIPT_FILENAME );

    
$dirTarget $dirPath."/".$offset;
    
$urlTarget $urlPath."/".$offset;

    if( 
is_file$dirTarget ) )
    {
        
header"Location: ".$urlPath."/".urlDoEncode$offset ) );
        exit;
    }
    
    
$dirs = array();
    
$files = array();
    
$dirTarget stripslashes$dirTarget );
    if( 
$handle = @opendir$dirTarget ) )
    {
        
$error 0;
        while( 
$item readdir$handle ) )
        {
            if( ! 
in_array$item$ignoreFiles ) )
            {
                
$item = array(
                    
"name" => $item,
                    
"type" => filetype$dirTarget."/".$item ),
                    
"date" => filemtime$dirTarget."/".$item ),
                    
"size" => filesize$dirTarget."/".$item ),
                );

                if( 
$item["type"] == "dir" )
                {
                    
arrayPlace$dirs$item$key$order );
                }
                else
                {
                    
arrayPlace$files$item$key$order );
                }
            }
        }
        
closedir$handle );
    }
    else
    {
        
$error 1;
    }

    
$items array_merge$dirs$files );
?>
<html>
<body>
    <table border="0" cellspacing="0" width="100%">
    <tr align="left" valign="top">
    <td align="center"><b>Type</b></td>
    <td align="center"><b><a href="<? echo urlDoEncode$request )."?key=name&order=".( $key == "name" ? ( $order == "A" "D" "A" ) : "A" ); ?>">Name</a></b></td>
    <td align="center"><b><a href="<? echo urlDoEncode$request )."?key=date&order=".( $key == "date" ? ( $order == "A" "D" "A" ) : "A" ); ?>">Date</a></b></td>
    <td align="center"><b><a href="<? echo urlDoEncode$request )."?key=size&order=".( $key == "size" ? ( $order == "A" "D" "A" ) : "A" ); ?>">Size</a></b></td>
    </tr>
<?
    
if( $error )
    {
?>
    <tr>
        <td colspan="4" align="center">
            <font color="#ff0000"><b>
                Cannot read directory !
            </b></font>
        </td>
    </tr>
<?
    
}
    for( 
$i 0$i sizeof$items ); $i++ )
    {
?>
    <tr valign="top">
    <td align="center"><?=$items[$i]["type"]?></td>
    <td>
        <a href="<?=$SCRIPT_NAME."/".urlDoEncode$offset.( $offset == "" "" "/" ).$items[$i]["name"] )?>"><?=$items[$i]["name"]?></a>
        <?=$items[$i]["type"] == "dir" "/" "" )?>
    </td>
    <td align="right"><?=date"r"$items[$i]["date"] )?></td>
    <td align="right">
<?
    
if( $items[$i]["type"] == "dir" )
    {
        echo 
'-';
    }
    else
    {
        
$size $items[$i]["size"];
        if( 
$size 1024 )
        {
            
printf"%.2f &nbsp;b"$size );
        }
        elseif( 
$size 1024 1024 )
        {
            
printf"%.2f Kb"$size 1024 );
        }
        else
        {
            
printf"%.2f Mb"$size 1048576 );
        }
    }
?>
    </td>
    </tr>
<?
    
}
?>
    </table>
</body>
</html>