Version: 0.4

Type: Full Script

Category: File Management

License: GNU General Public License

Description: Dir and Filebrowser. showing - file content (if permitted) - filepermissions - date of last access - date of last change - files starting with a dot (".") Edits files (If this operation is permitted to your user status). Known bug: - open a file with the html tag "textarea" in it , then you'll see. This code can be used to test the servers Securitylevel as well.



<html>
<head>
 <title>DirFilebrowse v 0.3</title>
 <style>
  body{
        font-family: Verdana ;
        font-size: 11px;
        text-decoration: none;
        color:black;
  }
  .normal{
         font-family: Verdana ;
         font-size: 10px;
         text-decoration: none;
  }
 </style>
</head>
<body>

<form action="<? echo $_SERVER['PHP_SELF'];?>" method="get">
<?


/*
*  DirFilebrowse v 0.3 by Ali Chahvand <ali23de@yahoo.de>
*  You can use this code however you want to. The  only limitation that i set is
*  that you may not declare this script as your own work.
*  If anyone out there uses it please drop me
*  a mail , so i know someone uses my code and the time i spent on this script was
*  not waste of time.
*
* I know this code is not perfect, but i'll improve that code when i have some time.
*
* - textarea bug fix by Mark Kraus http://www.reasonmaster.net/ 
* - please include this credit with file as well
*/



// DirFilebrowse v 0.3
if(phpversion() >= "4.2.0"){  // Checking for correct PHP-Version
   $i = 1;

   function get_perms($file) { // this Function is copied from PHP.net
      $p_bin = substr(decbin(fileperms($file)), -9) ;
      $p_arr = explode(".", substr(chunk_split($p_bin, 1,"."), 0, 17)) ;
      $perms = ""; $i = 0;
      foreach ($p_arr as $this) {
         $p_char = ( $i%3==0 ? "r" : ( $i%3==1 ? "w":"x" ) );
         $perms .= ( $this=="1" ? $p_char : "-" ) . ($i%3==2 ? " " : "" );
         $i++;
      }
      return $perms;
   }

   if(!isset($_GET["opendir"])) $_GET["opendir"] = "";
   // Directoryhandling
   if (!isset($_GET["path"])){
        $strOpenDir = $_SERVER["DOCUMENT_ROOT"];
        $strPath = $_SERVER["DOCUMENT_ROOT"];
   }else{
     $strDir = $_GET["opendir"];
     $strOpenDir = $_GET["path"]."/".$strDir;
     if($strDir != "..") $strOpenDir = $_GET["path"]."/".$strDir;
     else $strOpenDir = strrev(substr(strrev($_GET["path"]),strpos(strrev($_GET["path"]),"/")+1,strlen($_GET["path"]))); // getting path of a directory above current one
     $strPath = $strOpenDir;
   }

     if(@chdir($strOpenDir) == 0) echo "No such Directory dude. (connot open : <b>$strOpenDir</b>)";

                                 echo "current Path: <code style=\"color:orange;\">$strOpenDir</code><br>";
   if(isset($_GET['openfile']))  echo "current File: <code style=\"color:orange;\">$_GET[openfile]</code>";

   // Reading directories and files from current dir.
   if ($handle = @opendir($strOpenDir)) {
     echo "
           <table class=\"normal\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\" width=\"100%\">
            <tr bgcolor=\"black\" style=\"color:white;\">
             <td>Name</td>
             <td>Permissions</td>
             <td>last changed</td>
             <td>last accessed</td>
             <td>Size</td>
            </tr>
          ";
      while (false !== ($file = readdir($handle))) {
              if($i%2 != 0) $bg = "white"; else $bg = "#FFCC99"; // Hintergrund der Zeile
              if ($file != ".") {
                 if($file != ".."){
                  $intFilefilesize = round(filesize($file)/1024,2) ;
                  $strfileperms = get_perms($file);// set file parameters
                  $intFilectime = date("d.m.y G:i:s",filectime($file)); // set last changed date
                  $intFileatime = date("d.m.y",fileatime($file)); // set last accessed date
                 }else{
                  $intFilefilesize = "" ;
                  $strfileperms = "";
                  $intFilectime = "";
                  $intFileatime = "";
                 }
                 $self = $_SERVER['PHP_SELF'];
                  if(is_file($file))
                     echo "<tr bgcolor=\"$bg\">
                            <td>
                             <a style=\"color: black;text-decoration:none;\" href=\"$self?path=$strPath&openfile=$file\">$file</a>
                            </td>
                            <td>
                             $strfileperms
                            </td>
                            <td>
                             $intFilectime
                            </td>
                            <td>
                             $intFileatime
                            </td>
                            <td>
                             <i>$intFilefilesize kb</i>
                            </td>
                          </tr>";
                  else
                     echo "<tr bgcolor=\"$bg\">
                            <td>
                             <a style=\"color: #999999; text-decoration:none;\" href=\"$self?path=$strPath&opendir=$file\">$file</a>
                            </td>
                            <td>
                             $strfileperms
                            </td>
                            <td>
                             $intFilectime
                            </td>
                            <td>
                             $intFileatime
                            </td>
                            <td>
                             <!-- is a dir -->
                            </td>
                          </tr>";
              }
           $i++;
      } // while
      closedir($handle);
   } // if

 // Fileviewing  / handling

  if(isset($_GET["openfile"])) $file = $_GET["openfile"];

 // Writing to file
 if(isset($_GET["save"])){
    $dat  = fopen($_GET["path"]."/".$_GET["opendir"]."/".$file,"w");
    if($data = fwrite($dat,$_GET["modifi"])){
       echo "<b>Modification written to file.</b><br><br>";
       unset($_GET["openfile"]);
    }else echo "Error while writing to file !";
 }

 // Reading the file
 if(isset($_GET["openfile"])){
    echo "<b>Filecontent</b><br><br>";
    if(is_writable($file)){
       $mod = "r+";
       $submit = "<input type=\"submit\">";
    }else{
       $mod = "r";
       $submit = "";
    }
    $dat  = fopen($file,$mod);
    echo "<textarea name=\"modifi\" style=\"color: orange;\" cols=\"120\" rows=\"15\">";
    while(!feof($dat)){
          $data = fgets($dat,1024);
          echo htmlentities($data);
    }
    $strOpenfile = $_GET["openfile"];
    $strPath = $_GET["path"];
    $strOpenDir = $_GET["opendir"];
    echo "</textarea>
         <input type=\"hidden\" name=\"save\" value=\"true\">
         <input type=\"hidden\" name=\"openfile\" value=\"$strOpenfile\">
         <input type=\"hidden\" name=\"path\" value=\"$strPath\">
         <input type=\"hidden\" name=\"opendir\" value=\"$strOpenDir\">
         $submit
         ";
 }// isset

}else{
 $intPhpVersion = phpversion();
 echo "wrong PHP Version. Can not execute DirFilebrowse with this version (<b>PHP Version $intPhpVersion</b>)";
}
?>
</table>
</form>
</body>
</html>