Version: 1.0
Type: Full Script
Category: File Management
License: GNU General Public License
Description: I originally made this program when I was running through a bunch of free webhosters. I got tired of relearning their interface so I made this one. I now have a 'real' website, and no longer need 'virtual' FTP. I couldn't bear to just dump it, so here it is. Now I'll probably have to make a bunch of versions ;) There is also an online web editor that I made to go with it... I'll add it in a few weeks when I get some spare time.
<?php
// Virtual FTP Program for PHP4 +
// By Mathew Eis <king_ro_bot@yahoo.com>
// I originally made this program when I was
// running through a bunch of free webhosters
// I got tired of relearning their interface
// so I made this one. I now have a 'real'
// website, and no longer need 'virtual' FTP.
// I couldn't bear to just dump it, so here it
// is. Now I'll probably have to make a bunch
// of new versions ;)
// There is also an online web editor that I
// made to go with it... I'll add it in a few weeks
// Function to get the listing of a directory
// Syntax: get_dir_list("/usr/local/bin");
// Gets:
// Path to directory
// Trailing slash shouldn't matter
// Returns:
// Array of files & folders in the directory
function get_dir_list($directory)
{
$files=array();
$numfiles = 0;
$handle=opendir($directory);
while($file = readdir($handle))
{
if($file != ".")
{
if(($directory != ".")||($file != ".."))
{
$files[$numfiles] = $file;
$numfiles++;
}
}
}
reset($files);
return $files;
}
// This function was used to decide which icon to show for a file.
// I used Apache's default icons...
function get_icon($file,$filename)
{
@$ext = substr($file,strrpos($file,"."),strlen($file));
$icon_path = "/icons/"; // Web path to icon images
$image = "generic.gif"; // This is the icon if we don't know what to use
if($filename == "..")
{
$image = "back.gif";
}
elseif(is_dir($file))
{
$image = "dir.gif";
}
elseif(($ext == ".jpg")||($ext == ".jpeg")||($ext == ".gif"))
{
$image = "image.gif";
}
elseif(($ext == ".txt")||($ext == ".text"))
{
$image = "text.gif";
}
elseif(($ext == ".html")||($ext == ".htm")||($ext == ".shtml")||($ext == ".php")||($ext == ".php3"))
{
$image = "html.gif";
}
return $icon_path.$image;
}
/*
Here was a place to check authorization to the FTP
if(!$hasaccess)
{
print "You do not have access";
}
else
{
*/
// Check the cwd...
$cwd = (isset($cwd) ? $cwd : ".");
$cwd = ($cwd == "" ? "." : $cwd);
$action = (isset($action) ? $action : "");
// We want to get a file
if($action == "get")
{
$size = filesize($file);
$handle = fopen($file,"r");
$contents = fread($handle,$size);
fclose($handle);
// Mime types needed work... I didn't have the time for it.
header("Content-Type: unknown");
print $contents;
}
else
{
// Print your header file here
// include("header.php");
// Make a directory
if($action == "mkdir")
{
if($cwd == ".")
{
$thedir = $file;
}
else
{
$thedir = $cwd."/".$file;
}
mkdir($thedir,0777);
}
// Remove a file
if($action == "rm")
{
unlink($file);
}
// Remove a directory
if($action == "rmdir")
{
rmdir($file);
}
// Upload a file
// On slow servers, the file is not copied fast enough
// to be stat' in the next list command. It shows up in
// The listing, but you can't get the size. There must
// be a workaround, but I didn't put that much time into
// it. It worked, that was enough.
if($action == "put")
{
if(is_uploaded_file($file))
{
if(is_file($cwd."/".$file_name))
{
unlink($cwd."/".$file_name);
}
copy($file,$cwd."/".$file_name);
chmod($cwd."/".$file_name,0777);
}
}
?>
<center>
<table cellpadding=5 cellspacing=0 border=1 width=450>
<tr><th align="left"><font size="+1">Virtual FTP Program</font></td></tr>
<tr>
<td>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align="left">
<form method="post" action="virtualftp.php">
<input type="hidden" name="action" value="cd">
Current Directory:
<br>
<select name="cwd">
<?php
$dirpath = split("/",$cwd);
$numpaths = sizeof($dirpath);
$dirpaths = array();
$textpaths = array();
for($cpath = 0; $cpath < $numpaths; $cpath++)
{
if($cpath == 0)
{
$dirpaths[$numpaths-$cpath-1] = $dirpath[$cpath];
}
else
{
$dirpaths[$numpaths-$cpath-1] = $dirpaths[$numpaths-$cpath-2]."/".$dirpath[$cpath];
}
if($dirpath[$cpath] != ".")
{
$textpaths[$numpaths-$cpath-1] = $dirpath[$cpath];
}
else
{
$textpaths[$numpaths-$cpath-1] = "/";
}
}
for($cpath = 0; $cpath < $numpaths; $cpath++)
{
print "<option value=\"".$dirpaths[$cpath]."\">".$textpaths[$cpath]."</option>\n";
}
if($cwd != ".")
{
print "<option value=".">/</option>\n";
}
?>
</select>
<input type="submit" value="Change Directory">
</form>
</td>
<td align="left">
<form method="post" action="virtualftp.php">
<input type="hidden" name="action" value="mkdir">
<?php
print "<input type=\"hidden\" name=\"cwd\" value=\"".$cwd."\">\n";
?>
Create Directory:
<br>
<input type="text" name="file" size=15>
<input type="submit" value="Create">
</form>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table cellpadding=2 cellspacing=0 border="1" width="100%">
<tr>
<th align="left">Filename</th>
<th align="left">Size</th>
<th align="left">Modified</th>
<th align="left">Delete</th>
</tr>
<?php
$files = get_dir_list($cwd);
$numfiles = sizeof($files);
sort($files);
for($fileat = 0; $fileat < $numfiles; $fileat++)
{
$thefile = $files[$fileat];
$filename = $thefile;
if($cwd == ".")
{
$filepath = $thefile;
}
elseif($thefile == "..")
{
$filepath = substr($cwd,0,strrpos($cwd,"/"));
}
else
{
$filepath = $cwd."/".$thefile;
}
$image = get_icon($filepath,$filename);
if(($filename == "..")||(is_dir($filepath)))
{
if($filename != "..")
{
$date = date("m/d/Y",filectime($filepath));
}
else
{
$date =" ";
}
print "<tr>\n";
print "<td align=\"left\">";
print "<a href=\"virtualftp.php?cwd=".urlencode($filepath)."&action=cd\">";
print "<img src=\"".$image."\" width=20 height=22 border=0>".$filename;
print "</a></td>\n";
print "<td align=\"left\"> </td>\n";
print "<td align=\"left\">".$date."</td>\n";
if($filename != "..")
{
print "<td align=\"left\"><a href=\"virtualftp.php?cwd=".urlencode($cwd)."&action=rmdir&file=".urlencode($filepath)."\"><img src=\"icons/delete.gif\" width=20 height=20 border=0></a></td>\n";
}
else
{
print "<td> </td>";
}
print "</tr>\n";
}
else
{
$size = filesize($filepath);
$date = date("m/d/Y",filectime($filepath));
print "<tr>\n";
print "<td align=\"left\">";
print "<a href=\"virtualftp.php?cwd=".urlencode($cwd)."&action=get&file=".urlencode($filepath)."\">";
print "<img src=\"".$image."\" width=20 height=22 border=0>".$thefile;
print "</a></td>\n";
print "<td align=\"left\">".$size."</td>\n";
print "<td align=\"left\">".$date."</td>\n";
print "<td align=\"left\"><a href=\"virtualftp.php?cwd=".urlencode($cwd)."&action=rm&file=".urlencode($filepath)."\"><img src=\"icons/delete.gif\" width=20 height=20 border=0></a></td>\n";
print "</tr>\n";
}
}
?>
</table>
</td>
</tr>
<tr>
<td>
Upload a file into this directory:
<br>
<form method="post" enctype="multipart/form-data" action="virtualftp.php">
<input type="hidden" name="action" value="put">
<?php
print "<input type=\"hidden\" name=\"cwd\" value=\"".$cwd."\">\n";
?>
<input type="file" name="file" size=20> <input type="submit" value="Put File">
</form>
</td>
</tr>
</table>
</center>
<?php
// } Other end of access block
}
?>