<?php
require_once "../includes/start.php";
require_once "../includes/functions.php";
require_once "../includes/header.php";
include_once "../themes/".$config['themes']."/index.php";
$downloadDir = "/tmp/";
$unzipCommand = "sudo -u $user /usr/bin/unzip";
$port=22;
function del_recursive($currentDir,$connection,$file){
//echo "entering $currentDir/$file<BR>";
if ($lista = @ftp_nlist($connection, "$file")){
for ($x=0;$x<count($lista);$x++){
//echo "tryng to delete $lista[$x]<BR>";
if (!@ftp_delete($connection, "$lista[$x]"))
del_recursive($currentDir,$connection,$lista[$x]);
}
@ftp_rmdir($connection, "$file");
}
}
include("parser.inc.php");
session_start();
$HPV = $HTTP_POST_VARS;
// Get the POST, GET and SESSION variables (if register_globals=off (PHP4.2.1+))
// It's a bit of a dirty hack but variables are sometimes GET and sometimes POST variables
$mode=(isset($HPV['mode']))?$HPV['mode']:$HTTP_GET_VARS['mode'];
$action=(isset($HPV['action']))?$HPV['action']:$HTTP_GET_VARS['action'];
$currentDir=(isset($HPV['currentDir']))?$HPV['currentDir']:$HTTP_GET_VARS['currentDir'];
$file=(isset($HPV['file']))?$HPV['file']:$HTTP_GET_VARS['file'];
$file2=(isset($HPV['file2']))?$HPV['file2']:$HTTP_GET_VARS['file2'];
$permissions=(isset($HPV['permissions']))?$HPV['permissions']:$HTTP_GET_VARS['permissions'];
$directory=(isset($HPV['directory']))?$HPV['directory']:$HTTP_GET_VARS['directory']; $MAX_FILE_SIZE=(isset($HPV['MAX_FILE_SIZE']))?$HPV['MAX_FILE_SIZE']:$HTTP_GET_VARS['MAX_FILE_SIZE'];
$logoff=(isset($HPV['logoff']))?$HPV['logoff']:$HTTP_GET_VARS['logoff'];
if(isset($HTTP_SESSION_VARS['server'])) {
$server=$HTTP_SESSION_VARS['server'];
$user=$HTTP_SESSION_VARS['user'];
$password=$HTTP_SESSION_VARS['password'];
$port=$HTTP_SESSION_VARS['port'];
} else {
$server=$HTTP_POST_VARS['server'];
$user=$HTTP_POST_VARS['user'];
$password=$HTTP_POST_VARS['password'];
$port=$HTTP_POST_VARS['port'];
}
if (isset($logoff))
{
session_unregister('server');
session_unregister('user');
session_unregister('password');
session_unregister('port');
unset($server);
unset($user);
unset($password);
unset($port);
session_destroy();
}
if (isset($server))
{
session_register('server', $server);
session_register('user', $user);
session_register('password', $password);
session_register('port', $port);
// $connection = @ftp_connect($server);
$connection = @ftp_connect($server, $port);
$loggedOn = @ftp_login($connection, $user, $password);
$systype = @ftp_systype($connection);
if(!isset($mode))
{
$mode=1; //(FTP_ASCII = 0; FTP_BINARY=1)
}
if ($loggedOn)
{
if (isset($currentDir))
{
ftp_chdir($connection, $currentDir);
}
$currentDir = ftp_pwd($connection);
$msg = "Текущая папка = $currentDir";
// what to do now ???
if(isset($action)) {
switch ($action) {
case "chmod": // Change permissions
if(@ftp_site($connection, "chmod $permissions $file"))
{
$msg= "Права выствлены.";
} else
{
$msg= "Не удалось выставить права для " . $file;
}
break;
case "cd": // Change directory
//First try : normal directory
if(@ftp_chdir($connection, $currentDir . "/" . $file))
{
$currentDir = @ftp_pwd($connection);
$msg = "Текущая папка = " . $currentDir;
}
elseif(@ftp_chdir($connection, $file)) // Symbolic link directory
{
$currentDir = @ftp_pwd($connection);
$msg = "Текущая папка = " . $currentDir;
}
else // link to a file so let's retrieve this...
{
header("Content-disposition: attachment; filename=\"$file\"");
header("Content-type: application/octetstream");
header("Pragma: ");
header("Cache-Control: cache");
header("Expires: 0");
//Determine original filename
$filearray = explode("/",$file);
$file = $filearray[sizeof($filearray)-1];
$msg = $file;
$fp = fopen($downloadDir . $file, "w");
if(!@ftp_fget($connection,$fp,"$file",$mode))
{
fclose($fp);
exit;
}
fclose($fp);
$data = readfile($downloadDir . $file);
$i=0;
while ($data[$i] != "")
{
echo $data[$i];
$i++;
}
unlink($downloadDir . $file);
exit;
}
break;
case "get": // Download file
header("Content-disposition: attachment; filename=\"$file\"");
header("Content-type: application/octetstream");
header("Pragma: ");
header("Cache-Control: cache");
header("Expires: 0");
$fp = fopen($downloadDir . $file, "w");
ftp_fget($connection,$fp,"$file",$mode) OR DIE("Error downloading file");
fclose($fp);
$data = readfile($downloadDir . $file);
$i=0;
while ($data[$i] != "")
{
echo $data[$i];
$i++;
}
unlink($downloadDir . $file);
exit;
break;
case "put": // Upload file
if($file_size > $MAX_FILE_SIZE)
{
$msg = "<B>Размер файла слишком большой !</B> (max. " . $MAX_FILE_SIZE . "bytes)<P>";
}
else
{
if(file_exists($HTTP_POST_FILES['file']['tmp_name']))
{
if ($mode==1)
{
ftp_put($connection, $currentDir . "/" . $HTTP_POST_FILES['file']['name'], $HTTP_POST_FILES['file']['tmp_name'], 1);
}
else
{
ftp_put($connection, $currentDir . "/" . $HTTP_POST_FILES['file']['name'], $HTTP_POST_FILES['file']['tmp_name'], 0);
}
unlink($HTTP_POST_FILES['file']['tmp_name']);
}
else
{
$msg = "Файл не закачан.";
}
}
break;
case "deldir"; // Delete directory
if(@ftp_rmdir($connection, "$file"))
{
$msg = "$file удалён";
}
else
{
//Verify if has files inside and if so, call recursive del
if ($lista = @ftp_nlist($connection, "$currentDir/$file")){
del_recursive($currentDir,$connection,$file);
$msg = "Папка $currentDir/$file удалён";
}
else $msg = "Не могу удалить $file";
}
break;
case "delfile"; // Delete file
if(@ftp_delete($connection, "$file"))
{
$msg = "$file удалён";
}
else
{
$msg = "Не удалось удалить $file";
}
break;
case "rename"; // Rename file
if(@ftp_rename($connection, "$file", "$file2"))
{
$msg = "$file переименован на to $file2";
}
else
{
$msg = "Не удалось переименовать $file в $file2";
}
break;
case "createdir": // Create a new directory
if(@ftp_mkdir($connection, "$file"))
{
$msg = "$file создана";
}
else
{
$msg = "Не удалось создать $file";
}
break;
case "unzipfile";
$filens = str_replace(" ","\\ ",$file);
if (exec("$unzipCommand $currentDir/$filens -d $currentDir/"))
{
$msg = "$file разархивирован";
} else {
$msg = "Не удалось разархивировать файл !";
}
break;
}
}
?>
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" SRC="include/script.js"></SCRIPT>
</HEAD>
<BODY>
<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0 WIDTH='100%'>
<TR>
<TD CLASS=menu>
<?php if($loggedOn) { ?>
[ <A CLASS=menu HREF="<?=$PHP_SELF;?>?logoff=true">Выход</A>
| <A CLASS=menu HREF="javascript:changeMode('0')">Режим ASCII</A>
| <A CLASS=menu HREF="javascript:changeMode('1')">Режим Binary</A>
]
<?php } else { ?>
[ <A CLASS=menu HREF="<?=$PHP_SELF;?>?logoff=true">Повторить</A> ]
<?php } ?>
</TD>
<TD CLASS=menu ALIGN=RIGHT>
<FORM METHOD=POST NAME="currentMode">
Текущий режим :<INPUT TYPE='text' NAME='showmode' VALUE='<?=$mode==1?"FTP_BINARY":"FTP_ASCII";?>' STYLE='border: none; background-color: #cfcfbb; text-align: right; size:200px;' ALIGN=RIGHT></TD>
</FORM>
</TR>
<TR><TD><?=$msg;?></TD><TD ALIGN=RIGHT><?php print ($loggedOn)?"Подключён к $server:$port ($systype)":"Not connected";?></TD></TR>
</TABLE>
<FORM NAME="actionform" METHOD=POST ACTION='<?=$PHP_SELF;?>'>
<INPUT TYPE='hidden' NAME='action' VALUE=''>
<INPUT TYPE='hidden' NAME='currentDir' VALUE='<?=$currentDir;?>'>
<INPUT TYPE='hidden' NAME='file' VALUE=''>
<INPUT TYPE='hidden' NAME='file2' VALUE=''>
<INPUT TYPE='hidden' NAME='permissions' VALUE=''>
<INPUT TYPE='hidden' NAME='mode' VALUE='<?=$mode;?>' STYLE='border: none; background-color: #EFEFEF;'>
</FORM>
<HR>
<TABLE CELLPADDING=2 CELLSPACING=0>
<TR>
<!-- Goto directory -->
<FORM NAME='cdDirect' METHOD=POST ACTION='<?=$PHP_SELF;?>'>
<INPUT TYPE='hidden' NAME='action' VALUE='cd'>
<INPUT TYPE='hidden' NAME='currentDir' VALUE='<?=$currentDir;?>'>
<TD VALIGN=TOP>
<INPUT TYPE="text" NAME="file" VALUE="">
</TD>
<TD VALIGN=TOP>
<INPUT TYPE="SUBMIT" VALUE="Перейти к папке" STYLE='width=120;'>
</TD>
</FORM>
</TR>
<TR>
<!-- Create directory -->
<FORM METHOD=POST NAME='dirinput' ACTION="<?=$PHP_SELF;?>">
<TD VALIGN=TOP>
<INPUT TYPE="text" NAME="directory" VALUE="">
</TD>
<TD VALIGN=TOP>
<INPUT TYPE="BUTTON" VALUE="Создать папку" OnClick='javascript:createDirectory(dirinput.directory.value)' STYLE='width=120;'>
</TD>
</FORM>
</TR>
<TR>
<FORM NAME='putForm' ENCTYPE="multipart/form-data" METHOD=POST ACTION="<?=$PHP_SELF;?>">
<INPUT TYPE="hidden" NAME="action" VALUE="put">
<INPUT TYPE='hidden' NAME='currentDir' VALUE='<?=$currentDir;?>'>
<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="2000000">
<INPUT TYPE='hidden' NAME='mode' VALUE='<?=$mode;?>'>
<TD VALIGN=TOP>
<INPUT TYPE="file" NAME="file" STYLE="width:250px;">
</TD>
<TD VALIGN=TOP>
<INPUT TYPE="SUBMIT" VALUE="Загрузить файл" STYLE='width=120;'>
</TD>
</FORM>
</TR>
</TABLE>
<HR>
<P>
<?php
$list=Array();
$list=ftp_rawlist($connection, "");
?>
<TABLE>
<TR>
<TD><IMG SRC="img/parent.gif" HEIGHT=20 WIDTH=20 ALIGN=TOP></TD>
<TD ALIGN=LEFT COLSPAN=7><A HREF='javascript:submitForm("cd","..")'>..</A></TD>
</TR>
<?php
$list = parse_ftp_rawlist($list, $systype);
if (is_array($list))
{
// Directories
foreach($list as $myDir)
{
if ($myDir["is_dir"]==1)
{
$fileAction = "cd";
$fileName = $myDir["name"];
print "<TR>\n";
print "<TD><IMG SRC=img/folder.gif ALIGN=TOP></TD>\n";
print "<TD><A HREF='javascript:submitForm(\"cd\",\"". $fileName . "\")'>". $myDir["name"] . "</A></TD>\n";
print "<TD ALIGN=RIGHT>". $myDir["size"] . "</TD>\n";
print "<TD>". $myDir["date"] . "</TD>\n";
print "<TD>". $myDir["perms"] . "</TD>\n";
print "<TD>". $myDir["user"] . "</TD>\n";
print "<TD>". $myDir["group"] . "</TD>\n";
print "<TD><A HREF='javascript:Confirmation(\"" . $PHP_SELF . "?action=deldir&file=". $myDir["name"] . "¤tDir=". $currentDir . "\")'><IMG SRC=img/delete.gif BORDER=0 ALT=\"Delete\"></A></TD>\n";
print "<TD><A HREF='javascript:renameFile(\"" . $myDir["name"] . "\")'><IMG SRC=img/rename.gif BORDER=0 ALT=\"Rename\"></A></TD>\n";
print "<TD>";
print "<A HREF='javascript:;' OnClick='window.open(\"setpermission.php?file=" . $fileName . "&perms=" . $myDir["perms"] . "\",\"permissions\",\"width=250,height=150,scrollbars=no,menubar=no,status=yes,directories=no,location=no\")'><IMG SRC='img/settings.gif' WIDTH='20' HEIGHT='20' BORDER=0 ALT='Change permissions'></A>";
print "</TD>\n";
print "</TR>\n";
}
}
// Links
foreach($list as $myDir)
{
if ($myDir["is_link"]==1)
{
$fileAction = "cd";
$fileName = $myDir["target"];
print "<TR>\n";
print "<TD><IMG SRC=img/link.gif ALIGN=TOP></TD>\n";
print "<TD><A HREF='javascript:submitForm(\"cd\",\"". $fileName . "\")'>". $myDir["name"] . "</A></TD>\n";
print "<TD ALIGN=RIGHT>". $myDir["size"] . "</TD>\n";
print "<TD>". $myDir["date"] . "</TD>\n";
print "<TD>". $myDir["perms"] . "</TD>\n";
print "<TD>". $myDir["user"] . "</TD>\n";
print "<TD>". $myDir["group"] . "</TD>\n";
print "<TD><A HREF='javascript:Confirmation(\"" . $PHP_SELF . "?action=deldir&file=". $myDir["name"] . "¤tDir=". $currentDir . "\")'><IMG SRC=img/delete.gif BORDER=0 ALT=\"Delete\"></A></TD>\n";
print "<TD><A HREF='javascript:renameFile(\"" . $myDir["name"] . "\")'><IMG SRC=img/rename.gif BORDER=0 ALT=\"Rename\"></A></TD>\n";
print "<TD>";
print "Ссылка ". $myDir["target"];
print "</TD>\n";
print "</TR>\n";
}
}
// Files
foreach($list as $myDir)
{
if ($myDir["is_link"]!=1 && $myDir["is_dir"]!=1)
{
$fileAction = "get";
$fileName = $myDir["name"];
print "<TR>\n";
print "<TD><IMG SRC=img/file.gif ALIGN=TOP></TD>\n";
print "<TD><A HREF='javascript:submitForm(\"get\",\"". $fileName . "\")'>". $myDir["name"] . "</A></TD>\n";
print "<TD ALIGN=RIGHT>". $myDir["size"] . "</TD>\n";
print "<TD>". $myDir["date"] . "</TD>\n";
print "<TD>" . $myDir["perms"] . "</TD>\n";
print "<TD>". $myDir["user"] . "</TD>\n";
print "<TD>". $myDir["group"] . "</TD>\n";
print "<TD><A HREF='javascript:Confirmation(\"" . $PHP_SELF . "?action=delfile&file=". $myDir["name"] . "¤tDir=". $currentDir . "\")'><IMG SRC=img/delete.gif BORDER=0 ALT=\"Delete\"></A></TD>\n";
print "<TD><A HREF='javascript:renameFile(\"" . $myDir["name"] . "\")'><IMG SRC=img/rename.gif BORDER=0 ALT=\"Rename\"></A></TD>\n";
print "<TD>";
print "<A HREF='javascript:;' OnClick='window.open(\"setpermission.php?file=" . $fileName . "&perms=" . $myDir["perms"] . "\",\"permissions\",\"width=250,height=150,scrollbars=no,menubar=no,status=yes,directories=no,location=no\")'><IMG SRC='img/settings.gif' WIDTH='20' HEIGHT='20' BORDER=0 ALT='Change permissions'></A>";
print "</TD>\n";
if (strtolower($myDir["extension"]) == "zip")
{
print "<TD><A HREF='javascript:ConfirmationUnzip(\"" . $PHP_SELF . "?action=unzipfile&file=". $myDir["name"] . "¤tDir=". $currentDir . "\")'><IMG SRC=img/zip.gif BORDER=0 ALT=\"Unzip\"></A></TD>\n";
} else {
echo "<TD> </td>";
}
print "</TR>\n";
}
}
}
print " </TABLE>";
}
else
{
if(!isset($msg))
{
$msg = "Could not connect to server $server:$port with user $user<P><A HREF='" . $PHP_SELF . "?logoff=true'>Try again...</A>";
}
?>
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" SRC="include/script.js"></SCRIPT>
</HEAD>
<BODY>
<?php
print $msg;
}
}
else // Still need to logon...
{
?>
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" SRC="include/script.js"></SCRIPT>
</HEAD>
<BODY>
<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0 WIDTH='100%'>
<TR>
<TD CLASS=menu>
<B>Online FTP</B>
</TD>
</TR>
</TABLE>
<FORM NAME=logon action='<?=$PHP_SELF;?>' METHOD=POST>
<TABLE>
<TR>
<TD>Сервер</TD>
<TD><INPUT TYPE=TEXT NAME=server SIZE=18> Port : <INPUT TYPE=TEXT NAME=port SIZE=6 VALUE=21></TD>
</TR>
<TR>
<TD>Имя пользователя</TD>
<TD>
<INPUT TYPE=TEXT NAME=user SIZE=18>
<INPUT TYPE="checkbox" NAME="anonymous" VALUE=1 OnClick="anonymousAccess()"> : Anonymous access
</TD>
</TR>
<TR>
<TD>Пароль</TD>
<TD><INPUT TYPE=PASSWORD NAME=password SIZE=18></TD>
</TR>
<TR>
<TD COLSPAN=2 ALIGN=CENTER><INPUT TYPE=SUBMIT VALUE="Войти"></TD>
</TR>
</TABLE>
</FORM>
<?php
}
?>
</BODY>
</HTML>
<?
echo '<br /><img src="'.BASEDIR.'../images/img/act_home.gif" alt="image" /> <a href="'.BASEDIR.'../index.php?'.SID.'">На главную</a>';
include_once "../themes/".$config['themes']."/foot.php";
?>