Agent-Logs-Url: https://github.com/GameServerPanel/GSP/sessions/89922108-1604-44ae-949d-358d32b9d70a Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com>
399 lines
No EOL
17 KiB
PHP
399 lines
No EOL
17 KiB
PHP
<?php
|
|
|
|
// -------------------------------------------------------------------------------
|
|
// | net2ftp: a web based FTP client |
|
|
// | Copyright (c) 2003-2013 by David Gartner |
|
|
// | |
|
|
// | This program is free software; you can redistribute it and/or |
|
|
// | modify it under the terms of the GNU General Public License |
|
|
// | as published by the Free Software Foundation; either version 2 |
|
|
// | of the License, or (at your option) any later version. |
|
|
// | |
|
|
// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
// ** **
|
|
// ** **
|
|
|
|
function net2ftp_module_sendHttpHeaders() {
|
|
|
|
// --------------
|
|
// This function sends HTTP headers
|
|
// --------------
|
|
|
|
global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result, $net2ftp_output;
|
|
|
|
// ------------------------------------
|
|
// 1. Register the global variables
|
|
// ------------------------------------
|
|
|
|
if ($net2ftp_globals["screen"] == 2) {
|
|
|
|
// Code for old file jupload applet (jupload version 0.86)
|
|
// $file_counter = 0;
|
|
// foreach ((array)$_FILES as $tagname=>$object) {
|
|
// if ($object['name'] != "") {
|
|
// $file_counter = $file_counter + 1;
|
|
// $uploadedFilesArray["$file_counter"]["name"] = $object['name'];
|
|
// $uploadedFilesArray["$file_counter"]["tmp_name"] = $object['tmp_name'];
|
|
// $uploadedFilesArray["$file_counter"]["size"] = $object['size'];
|
|
// $uploadedFilesArray["$file_counter"]["error"] = $object['error'];
|
|
// // Look for special encoded jupload files
|
|
// $contentType = $object['type'];
|
|
// if (substr($contentType,0,7) == "jupload") {
|
|
// $base64_encoded_path = substr($contentType,8);
|
|
// $base64_decoded_path = base64_decode($base64_encoded_path);
|
|
// $uploadedFilesArray["$file_counter"]["absolute_directory"] = $base64_decoded_path;
|
|
// } // end if
|
|
// } // end if
|
|
// } // end foreach
|
|
|
|
// Code for new file jupload applet (jupload version 5.0.8)
|
|
$file_counter = 0;
|
|
foreach ((array)$_FILES as $tagname=>$object) {
|
|
if ($object['name'] != "") {
|
|
$file_counter = $file_counter + 1;
|
|
$uploadedFilesArray["$file_counter"]["name"] = $object['name'];
|
|
$uploadedFilesArray["$file_counter"]["type"] = $object['type'];
|
|
$uploadedFilesArray["$file_counter"]["tmp_name"] = $object['tmp_name'];
|
|
$uploadedFilesArray["$file_counter"]["error"] = $object['error'];
|
|
$uploadedFilesArray["$file_counter"]["size"] = $object['size'];
|
|
$uploadedFilesArray["$file_counter"]["mime"] = validateEntry($_POST["mimetype".$file_counter]);
|
|
$uploadedFilesArray["$file_counter"]["relative_directory"] = validateDirectory($_POST["relpathinfo".$file_counter]);
|
|
$uploadedFilesArray["$file_counter"]["mtime"] = validateEntry($_POST["filemodificationdate".$file_counter]);
|
|
} // end if
|
|
} // end foreach
|
|
|
|
echo "Please wait, the files are being transferred to the FTP server...<br />\n";
|
|
flush();
|
|
|
|
// ------------------------------------
|
|
// 2. POST METHOD: Move files from the *webserver's* temporary directory to *net2ftp's*
|
|
// temporary directory (move_uploaded_files).
|
|
// ------------------------------------
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST" && sizeof($uploadedFilesArray) > 0) {
|
|
|
|
$moved_counter = 0;
|
|
for ($j=1; $j<=sizeof($uploadedFilesArray); $j++) {
|
|
$file_name = $uploadedFilesArray["$j"]["name"];
|
|
$file_tmp_name = $uploadedFilesArray["$j"]["tmp_name"];
|
|
$file_size = $uploadedFilesArray["$j"]["size"];
|
|
$file_error = $uploadedFilesArray["$j"]["error"];
|
|
$file_relative_directory = $uploadedFilesArray["$j"]["relative_directory"];
|
|
|
|
if (($file_name != "" && $file_tmp_name == "") || $file_size > $net2ftp_settings["max_filesize"]) {
|
|
// The case ($file_name != "" && $file_tmp_name == "") occurs when the file is bigger than the directives set in php.ini
|
|
// In that case, only $uploadedFilesArray["$j"]["name"] is filled in.
|
|
echo "WARNING: File <b>$file_name</b> skipped: this file is too big.<br />\n";
|
|
@unlink($file_tmp_name);
|
|
continue;
|
|
}
|
|
elseif (checkAuthorizedName($file_name) == false || checkAuthorizedName($file_relative_directory) == false) {
|
|
echo "WARNING: File <b>$file_relative_directory</b> skipped: it contains a banned keyword.<br />\n";
|
|
$skipped = $skipped + 1;
|
|
@unlink($file_tmp_name);
|
|
continue;
|
|
}
|
|
|
|
// Create the temporary filename as follows: (from left to right)
|
|
// - Use prefix "upload__", to be able to identify from where this temporary file comes from
|
|
// - Create a random filename
|
|
// - Add the original filename extension, to be able to identify the filetype
|
|
// - Add suffix ".txt" to avoid that the file would be executed on the webserver
|
|
$extension = get_filename_extension($file_name);
|
|
if (substr($file_name, -6) == "tar.gz") { $extension = "tar.gz"; }
|
|
$tempfilename = tempnam2($net2ftp_globals["application_tempdir"], "upload__", "." . $extension . ".txt");
|
|
if ($tempfilename == false) {
|
|
// If you get this warning message, you've probably forgotten to chmod 777 the /temp directory
|
|
echo "WARNING: File <b>$file_name</b> skipped: unable to create a temporary file on the webserver.<br />\n";
|
|
@unlink($file_tmp_name);
|
|
continue;
|
|
}
|
|
|
|
// Move the uploaded file
|
|
$move_uploaded_file_result = move_uploaded_file($uploadedFilesArray["$j"]["tmp_name"], $tempfilename);
|
|
if ($move_uploaded_file_result == false) {
|
|
echo "WARNING: File <b>$file_name</b> skipped: unable to move the uploaded file to the webserver's temporary directory.<br />\n";
|
|
@unlink($file_tmp_name);
|
|
@unlink($tempfilename);
|
|
continue;
|
|
}
|
|
else {
|
|
$moved_counter = $moved_counter + 1;
|
|
$acceptedFilesArray["$moved_counter"] = $uploadedFilesArray["$j"]; // Copy all parameters for this file from the $uploadedFilesArray to the $acceptedFilesArray
|
|
$acceptedFilesArray["$moved_counter"]["tmp_name"] = $tempfilename; // Overwrite the old temporary name by the new one
|
|
}
|
|
|
|
} // end for j
|
|
|
|
flush();
|
|
|
|
} // end if elseif
|
|
|
|
|
|
// ------------------------------------
|
|
// 3. Move the files from net2ftp's temporary directory to the FTP server.
|
|
// ------------------------------------
|
|
if (sizeof($acceptedFilesArray) == 0 && sizeof($uploadedFilesArray) != 0) { echo "WARNING: No files were accepted (see messages above), so nothing will be transferred to the FTP server.<br />\n"; }
|
|
elseif (sizeof($acceptedFilesArray) > 0) {
|
|
|
|
// ------------------------------
|
|
// 3.1 Open connection
|
|
// ------------------------------
|
|
|
|
// Open connection
|
|
echo __("Connecting to the FTP server") . "<br />\n";
|
|
$conn_id = ftp_openconnection();
|
|
if ($net2ftp_result["success"] == false) {
|
|
echo "ERROR: " . $net2ftp_result["errormessage"] . "<br />\n";
|
|
return false;
|
|
}
|
|
|
|
// ------------------------------
|
|
// For loop (loop over all the files)
|
|
// ------------------------------
|
|
for ($k=1; $k<=sizeof($acceptedFilesArray); $k++) {
|
|
$file_name = $acceptedFilesArray["$k"]["name"];
|
|
$file_tmp_name = $acceptedFilesArray["$k"]["tmp_name"];
|
|
$file_size = $acceptedFilesArray["$k"]["size"];
|
|
$file_error = $acceptedFilesArray["$k"]["error"];
|
|
$file_relative_directory = $acceptedFilesArray["$k"]["relative_directory"];
|
|
|
|
$ftpmode = ftpAsciiBinary($file_name);
|
|
if ($ftpmode == FTP_ASCII) { $printftpmode = "FTP_ASCII"; }
|
|
elseif ($ftpmode == FTP_BINARY) { $printftpmode = "FTP_BINARY"; }
|
|
|
|
// ------------------------------
|
|
// 3.2 Within the for loop: create the subdirectory if needed
|
|
// ------------------------------
|
|
// Replace Windows-style backslashes \ by Unix-style slashes /
|
|
$file_relative_directory = str_replace("\\", "/", trim($file_relative_directory));
|
|
|
|
// Get the names of the subdirectories by splitting the string using slashes /
|
|
$file_subdirectories = explode("/", $file_relative_directory);
|
|
|
|
// $targetdirectory contains the successive directories to be created
|
|
$targetdirectory = $net2ftp_globals["directory"];
|
|
|
|
// Loop over sizeof()-1 because the last part is the filename itself:
|
|
for ($m=0; $m<sizeof($file_subdirectories)-1; $m++) {
|
|
// Create the targetdirectory string
|
|
$targetdirectory = glueDirectories($targetdirectory, $file_subdirectories[$m]);
|
|
// Check if the subdirectories exist
|
|
if ($targetdirectory != "") {
|
|
$result = @ftp_chdir($conn_id, $targetdirectory);
|
|
if ($result == false) {
|
|
$ftp_mkdir_result = ftp_mkdir($conn_id, $targetdirectory);
|
|
if ($ftp_mkdir_result == false) {
|
|
echo "WARNING: Unable to create the directory <b>$targetdirectory</b>. The script will try to continue...<br />\n";
|
|
continue;
|
|
}
|
|
echo "Directory $targetdirectory created.<br />\n";
|
|
} // end if
|
|
flush();
|
|
} // end if
|
|
} // end for m
|
|
|
|
// Store the $targetdirectory in the $acceptedFilesArray
|
|
if ($targetdirectory != "" && $targetdirectory != "/") {
|
|
$acceptedFilesArray["$k"]["targetdirectory"] = $targetdirectory;
|
|
}
|
|
|
|
// ------------------------------
|
|
// 3.3 Within the for loop: put local file to remote file
|
|
// ------------------------------
|
|
ftp_putfile($conn_id, "", $acceptedFilesArray["$k"]["tmp_name"], $acceptedFilesArray["$k"]["targetdirectory"], $acceptedFilesArray["$k"]["name"], $ftpmode, "move");
|
|
if ($net2ftp_result["success"] == false) {
|
|
echo "ERROR: File <b>$file_name</b> skipped. Message: " . $net2ftp_result["errormessage"] . "<br />\n";
|
|
setErrorVars(true, "", "", "", "");
|
|
continue;
|
|
} // end if
|
|
else { echo "The file <b>$file_name</b> was transferred to the FTP server successfully. <br />\n"; }
|
|
|
|
flush();
|
|
|
|
} // End for k
|
|
|
|
// Note: the java applet is looking for the word "SUCCESS" to determine if the upload result is OK or not (see applet parameter stringUploadSuccess)
|
|
// The applet doesn't seem to recognize the words "SUCCESS", "WARNING" or "ERROR" when they are issued by the code above
|
|
echo "SUCCESS";
|
|
|
|
// ------------------------------
|
|
// 3.4 Close connection
|
|
// ------------------------------
|
|
ftp_quit($conn_id);
|
|
|
|
} // end if
|
|
|
|
} // end if $screen == 2
|
|
|
|
} // end net2ftp_module_sendHttpHeaders
|
|
|
|
// ** **
|
|
// ** **
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
|
|
|
|
|
|
|
|
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
// ** **
|
|
// ** **
|
|
|
|
function net2ftp_module_printJavascript() {
|
|
|
|
// --------------
|
|
// This function prints Javascript code and includes
|
|
// --------------
|
|
|
|
// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result;
|
|
|
|
// Code
|
|
// echo "<script type=\"text/javascript\"><!--\n";
|
|
// echo "//--></script>\n";
|
|
|
|
// Include
|
|
// echo "<script type=\"text/javascript\" src=\"". $net2ftp_globals["application_rootdir_url"] . "/modules/upload/upload.js\"></script>\n";
|
|
|
|
} // end net2ftp_module_printJavascript
|
|
|
|
// ** **
|
|
// ** **
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
|
|
|
|
|
|
|
|
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
// ** **
|
|
// ** **
|
|
|
|
function net2ftp_module_printCss() {
|
|
|
|
// --------------
|
|
// This function prints CSS code and includes
|
|
// --------------
|
|
|
|
global $net2ftp_settings, $net2ftp_globals;
|
|
|
|
// Include
|
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"". $net2ftp_globals["application_rootdir_url"] . "/skins/" . $net2ftp_globals["skin"] . "/css/main.css.php?ltr=" . __("ltr") . "&image_url=" . urlEncode2($net2ftp_globals["image_url"]) . "\" />\n";
|
|
|
|
} // end net2ftp_module_printCssInclude
|
|
|
|
// ** **
|
|
// ** **
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
|
|
|
|
|
|
|
|
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
// ** **
|
|
// ** **
|
|
|
|
function net2ftp_module_printBodyOnload() {
|
|
|
|
// --------------
|
|
// This function prints the <body onload="" actions
|
|
// --------------
|
|
|
|
// global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result;
|
|
// echo "";
|
|
|
|
} // end net2ftp_module_printBodyOnload
|
|
|
|
// ** **
|
|
// ** **
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
|
|
|
|
|
|
|
|
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
// ** **
|
|
// ** **
|
|
|
|
function net2ftp_module_printBody() {
|
|
|
|
// --------------
|
|
// This function prints the login screen
|
|
// --------------
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Global variables
|
|
// -------------------------------------------------------------------------
|
|
global $net2ftp_settings, $net2ftp_globals, $net2ftp_messages, $net2ftp_result, $net2ftp_output;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Variables for screen 1
|
|
// -------------------------------------------------------------------------
|
|
if ($net2ftp_globals["screen"] == 1) {
|
|
|
|
// Title
|
|
$title = __("Upload directories and files using a Java applet");
|
|
|
|
// Next screen
|
|
$nextscreen = 2;
|
|
|
|
// Form name, back and forward buttons
|
|
$formname = "JavaUploadForm";
|
|
$back_onclick = "document.forms['" . $formname . "'].state.value='browse';document.forms['" . $formname . "'].state2.value='main';document.forms['" . $formname . "'].submit();";
|
|
|
|
// Action URL
|
|
$actionURL = printPHP_SELF("jupload");
|
|
|
|
// Maxima
|
|
$maxFileSize = $net2ftp_settings["max_filesize"];
|
|
$maxChunkSize = $net2ftp_settings["max_filesize"];
|
|
$maxFilesPerRequest = "100";
|
|
$max_filesize_net2ftp = formatFilesize($net2ftp_settings["max_filesize"]);
|
|
$max_upload_filesize_php = formatFilesize(@ini_get("upload_max_filesize"));
|
|
$max_execution_time = @ini_get("max_execution_time");
|
|
|
|
// Print the output
|
|
require_once($net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/manage.template.php");
|
|
|
|
} // end if
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Variables for screen 2
|
|
// -------------------------------------------------------------------------
|
|
// elseif ($net2ftp_globals["screen"] == 2) {
|
|
|
|
// THE OUTPUT IS GENERATED HIGHER UP, IN net2ftp_module_sendHttpHeaders().
|
|
// This is because the Applet only takes text - no HTML.
|
|
|
|
// } // end if
|
|
|
|
// -------------------------------------------------------------------------
|
|
// Print the output
|
|
// -------------------------------------------------------------------------
|
|
// Is done higher up, as for screen 1 a template is used, but not for screen 2.
|
|
|
|
} // End net2ftp_module_printBody
|
|
|
|
// ** **
|
|
// ** **
|
|
// **************************************************************************************
|
|
// **************************************************************************************
|
|
|
|
?>
|