function net2ftp_shutdown() { // -------------- // This function is registered through register_shutdown_function, so that it would be // executed when the script reaches the maximum execution time. // // The function displays a warning message, and deletes temporary files. // -------------- // ------------------------------------------------------------------------- // Global variables and settings // ------------------------------------------------------------------------- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; // ------------------------------------------------------------------------- // Delete the temporary files which were not deleted automatically // ------------------------------------------------------------------------- if (isset($net2ftp_globals["tempfiles"]) == true) { for ($i = 0; $i < sizeof($net2ftp_globals["tempfiles"]); $i++) { delete_dirorfile($net2ftp_globals["tempfiles"][$i]); } } // end if // ------------------------------------------------------------------------- // Store the consumption counter values in the database // ------------------------------------------------------------------------- putConsumption(); // ------------------------------------------------------------------------- // Print a message to tell the user that the script was halted // ------------------------------------------------------------------------- $time_taken = timer(); $max_execution_time = @ini_get("max_execution_time"); // - Check if the $max_execution_time is > 0, because on some PHP configs it is -1 (more // specifically: when PHP is run as CGI module). // - Check the time taken versus the maximum execution time, because on Windows + Apache // servers, the shutdown function is always called, even if the maximum execution time // was not reached. if ($max_execution_time > 0 && $time_taken > $max_execution_time - 1) { if (isStatusbarActive() == true && function_exists("setStatus") == true) { setStatus(10, 10, __("Script halted")); } $text = ""; $text .= "<b>" . __("Your task was stopped") . "</b><br /><br />\n"; $text .= __("The task you wanted to perform with net2ftp took more time than the allowed %1\$s seconds, and therefor that task was stopped.", $max_execution_time) . "<br />\n"; $text .= __("This time limit guarantees the fair use of the web server for everyone.") . "<br /><br />\n"; $text .= __("Try to split your task in smaller tasks: restrict your selection of files, and omit the biggest files.") . "<br /><br />\n"; if ($net2ftp_settings["net2ftpdotcom"] == "yes") { $text .= __("If you really need net2ftp to be able to handle big tasks which take a long time, consider installing net2ftp on your own server."); } if ($net2ftp_globals["state"] == "jupload") { echo $text; } else { echo "<div class=\"warning-box\"><div class=\"warning-text\">{$text}</div></div>\n\n"; } } }
function net2ftp($action) { // -------------- // This function is the main net2ftp function; it is the interface between 3rd party // scripts (CMS, control panels, etc), and the internal net2ftp modules and plugins. // // This function is called 5 times per pageload: to send the HTTP headers, to print // the javascript code, to print the CSS code, to print the body onload actions and // finally to print the body content. // -------------- // ------------------------------------------------------------------------- // Check that "sendHttpHeaders" action is only executed once // Check that no other actions can be executed if "sendHttpHeaders" has not yet been executed // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { if (defined("NET2FTP_SENDHTTPHEADERS") == true) { echo "Error: please call the net2ftp(\$action) function only once with \$action = \"sendHttpHeaders\"!"; return false; } else { define("NET2FTP_SENDHTTPHEADERS", 1); } } else { if (defined("NET2FTP_SENDHTTPHEADERS") == false) { echo "Error: please call the net2ftp(\$action) function first with \$action = \"sendHttpHeaders\"!"; return false; } } // ------------------------------------------------------------------------- // Global variables // ------------------------------------------------------------------------- global $net2ftp_settings, $net2ftp_globals, $net2ftp_result, $net2ftp_messages; // Set the NET2FTP constant which is used to check if template files are called by net2ftp if (defined("NET2FTP") == false) { define("NET2FTP", 1); } // Initialize the global variables if ($action == "sendHttpHeaders") { $net2ftp_globals = array(); $net2ftp_messages = array(); $net2ftp_output = array(); $net2ftp_result["success"] = true; $net2ftp_result["errormessage"] = ""; $net2ftp_result["debug_backtrace"] = ""; $net2ftp_result["exit"] = false; $net2ftp_settings = array(); } // ------------------------------------------------------------------------- // If an error occured during a previous execution of net2ftp(), return false // and let index.php print the error message // ------------------------------------------------------------------------- if ($net2ftp_result["success"] == false) { return false; } // ------------------------------------------------------------------------- // Input checks // ------------------------------------------------------------------------- if ($action != "sendHttpHeaders" && $action != "printJavascript" && $action != "printCss" && $action != "printBodyOnload" && $action != "printBody") { $net2ftp_result["success"] = false; $net2ftp_result["errormessage"] = "The \$action variable has an unknown value: {$action}."; $net2ftp_result["debug_backtrace"] = debug_backtrace(); logError(); return false; } // ------------------------------------------------------------------------- // Read settings files // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { require NET2FTP_APPLICATION_ROOTDIR . "/settings.inc.php"; require NET2FTP_APPLICATION_ROOTDIR . "/settings_authorizations.inc.php"; require NET2FTP_APPLICATION_ROOTDIR . "/settings_screens.inc.php"; } // ------------------------------------------------------------------------- // Main directories // ------------------------------------------------------------------------- $net2ftp_globals["application_rootdir"] = NET2FTP_APPLICATION_ROOTDIR; if (NET2FTP_APPLICATION_ROOTDIR_URL == "/") { $net2ftp_globals["application_rootdir_url"] = ""; } else { $net2ftp_globals["application_rootdir_url"] = NET2FTP_APPLICATION_ROOTDIR_URL; } $net2ftp_globals["application_includesdir"] = $net2ftp_globals["application_rootdir"] . "/includes"; $net2ftp_globals["application_languagesdir"] = $net2ftp_globals["application_rootdir"] . "/languages"; $net2ftp_globals["application_modulesdir"] = $net2ftp_globals["application_rootdir"] . "/modules"; $net2ftp_globals["application_pluginsdir"] = $net2ftp_globals["application_rootdir"] . "/plugins"; $net2ftp_globals["application_skinsdir"] = $net2ftp_globals["application_rootdir"] . "/skins"; $net2ftp_globals["application_tempdir"] = $net2ftp_globals["application_rootdir"] . "/temp"; // ------------------------------------------------------------------------- // Set basic settings // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { // Run the script to the end, even if the user hits the stop button ignore_user_abort(); // Execute function shutdown() if the script reaches the maximum execution time (usually 30 seconds) // DON'T REGISTER IT HERE YET, as this causes errors on newer versions of PHP; first include the function libraries // register_shutdown_function("net2ftp_shutdown"); // Set the error reporting level if ($net2ftp_settings["error_reporting"] == "ALL") { error_reporting(E_ALL); } elseif ($net2ftp_settings["error_reporting"] == "NONE") { error_reporting(0); } else { error_reporting(E_ERROR | E_WARNING | E_PARSE); } // Timer: start $net2ftp_globals["starttime"] = microtime(); $net2ftp_globals["endtime"] = microtime(); } // Set the PHP temporary directory // putenv("TMPDIR=" . $net2ftp_globals["application_tempdir"]); // ------------------------------------------------------------------------- // Function libraries: // 1. Libraries which are always needed // 2. Register global variables // 3. Function libraries which are needed depending on certain variables // // --> Do this only once, when $action == "sendHttpHeaders" // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { // 1. Libraries which are always needed require_once $net2ftp_globals["application_includesdir"] . "/authorizations.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/consumption.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/database.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/errorhandling.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/filesystem.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/html.inc.php"; require_once $net2ftp_globals["application_includesdir"] . "/StonePhpSafeCrypt.php"; require_once $net2ftp_globals["application_languagesdir"] . "/languages.inc.php"; require_once $net2ftp_globals["application_skinsdir"] . "/skins.inc.php"; // 1. Define functions which are used, but which did not exist before PHP version 4.3.0 if (version_compare(phpversion(), "4.3.0", "<")) { require_once $net2ftp_globals["application_includesdir"] . "/before430.inc.php"; } // 2. Register global variables (POST, GET, GLOBAL, ...) require_once $net2ftp_globals["application_includesdir"] . "/registerglobals.inc.php"; // 3. Function libraries which are needed depending on certain variables if ($net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "unzip") { require_once $net2ftp_globals["application_includesdir"] . "/pclerror.lib.php"; require_once $net2ftp_globals["application_includesdir"] . "/pcltar.lib.php"; require_once $net2ftp_globals["application_includesdir"] . "/pcltrace.lib.php"; require_once $net2ftp_globals["application_includesdir"] . "/pclzip.lib.php"; } if ($net2ftp_globals["state"] == "advanced_ftpserver" || $net2ftp_globals["state"] == "advanced_parsing" || $net2ftp_globals["state"] == "advanced_webserver" || $net2ftp_globals["state"] == "browse" || $net2ftp_globals["state"] == "copymovedelete" || $net2ftp_globals["state"] == "chmod" || $net2ftp_globals["state"] == "calculatesize" || $net2ftp_globals["state"] == "downloadzip" || $net2ftp_globals["state"] == "findstring" || $net2ftp_globals["state"] == "followsymlink" || $net2ftp_globals["state"] == "install" || $net2ftp_globals["state"] == "zip") { require_once $net2ftp_globals["application_includesdir"] . "/browse.inc.php"; } if ($net2ftp_globals["state"] == "downloadzip" || $net2ftp_globals["state"] == "zip") { require_once $net2ftp_globals["application_includesdir"] . "/zip.lib.php"; } // 4. Load the plugins require_once $net2ftp_globals["application_pluginsdir"] . "/plugins.inc.php"; $net2ftp_globals["activePlugins"] = getActivePlugins(); net2ftp_plugin_includePhpFiles(); // 5. Load the language file includeLanguageFile(); } // ------------------------------------------------------------------------- // Execute function shutdown() if the script reaches the maximum execution time (usually 30 seconds) // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { register_shutdown_function("net2ftp_shutdown"); } // ------------------------------------------------------------------------- // Log access // --> Do this only once, when $action == "sendHttpHeaders" // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { logAccess(); if ($net2ftp_result["success"] == false) { logError(); return false; } } // ------------------------------------------------------------------------- // Check authorizations // --> Do this only once, when $action == "sendHttpHeaders" // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders" && $net2ftp_settings["check_authorization"] == "yes" && $net2ftp_globals["ftpserver"] != "") { checkAuthorization($net2ftp_globals["ftpserver"], $net2ftp_globals["ftpserverport"], $net2ftp_globals["directory"], $net2ftp_globals["username"]); if ($net2ftp_result["success"] == false) { logError(); return false; } } // ------------------------------------------------------------------------- // Get the consumption counter values from the database // This retrieves the consumption of network and server resources for the // current IP address and FTP server from the database, and stores these // values in global variables. See /includes/consumption.inc.php for the details. // --> Do this only once, when $action == "sendHttpHeaders" // ------------------------------------------------------------------------- if ($action == "sendHttpHeaders") { getConsumption(); if ($net2ftp_result["success"] == false) { logError(); return false; } } // ------------------------------------------------------------------------- // Execute the action! // ------------------------------------------------------------------------- // ------------------------------------ // For most modules, everything must be done: send headers, print body, etc // ------------------------------------ if ($net2ftp_globals["state"] == "admin" || $net2ftp_globals["state"] == "admin_createtables" || $net2ftp_globals["state"] == "admin_emptylogs" || $net2ftp_globals["state"] == "admin_viewlogs" || $net2ftp_globals["state"] == "advanced" || $net2ftp_globals["state"] == "advanced_ftpserver" || $net2ftp_globals["state"] == "advanced_parsing" || $net2ftp_globals["state"] == "advanced_webserver" || $net2ftp_globals["state"] == "bookmark" || $net2ftp_globals["state"] == "browse" || $net2ftp_globals["state"] == "calculatesize" || $net2ftp_globals["state"] == "chmod" || $net2ftp_globals["state"] == "copymovedelete" || $net2ftp_globals["state"] == "edit" || $net2ftp_globals["state"] == "findstring" || $net2ftp_globals["state"] == "install" || $net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 1 || $net2ftp_globals["state"] == "login" || $net2ftp_globals["state"] == "login_small" || $net2ftp_globals["state"] == "logout" || $net2ftp_globals["state"] == "newdir" || $net2ftp_globals["state"] == "raw" || $net2ftp_globals["state"] == "rename" || $net2ftp_globals["state"] == "unzip" || $net2ftp_globals["state"] == "upload" || $net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] == "" || $net2ftp_globals["state"] == "zip") { require_once $net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"; if ($action == "sendHttpHeaders") { net2ftp_module_sendHttpHeaders(); // If needed, exit to avoid sending non-header output (by net2ftp or other application) // Example: if a module sends a HTTP redirect header (See /includes/authorizations.inc.php function checkAdminUsernamePassword()!) if ($net2ftp_result["exit"] == true) { exit; } } elseif ($action == "printJavascript") { net2ftp_module_printJavascript(); net2ftp_plugin_printJavascript(); } elseif ($action == "printCss") { net2ftp_module_printCss(); net2ftp_plugin_printCss(); } elseif ($action == "printBodyOnload") { net2ftp_module_printBodyOnload(); net2ftp_plugin_printBodyOnload(); } elseif ($action == "printBody") { // Print the status bar to be able to show the progress if (isStatusbarActive() == true) { require_once $net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/statusbar.template.php"; } require_once $net2ftp_globals["application_skinsdir"] . "/" . $net2ftp_globals["skin"] . "/status/status.inc.php"; // Do the work and meanwhile update the progress bar net2ftp_module_printBody(); // Update the consumption statistics $net2ftp_globals["endtime"] = microtime(); $net2ftp_globals["time_taken"] = timer(); addConsumption(0, $net2ftp_globals["time_taken"]); putConsumption(); // Set the progress bar to "finished" if (isStatusbarActive() == true) { $statusmessage = __("Script finished in %1\$s seconds", $net2ftp_globals["time_taken"]); setStatus(1, 1, $statusmessage); } } } elseif ($net2ftp_globals["state"] == "clearcookies" || $net2ftp_globals["state"] == "downloadfile" || $net2ftp_globals["state"] == "downloadzip" || $net2ftp_globals["state"] == "followsymlink" || $net2ftp_globals["state"] == "jupload" && $net2ftp_globals["screen"] == 2 || $net2ftp_globals["state"] == "view" && $net2ftp_globals["state2"] != "") { require_once $net2ftp_globals["application_modulesdir"] . "/" . $net2ftp_globals["state"] . "/" . $net2ftp_globals["state"] . ".inc.php"; if ($action == "sendHttpHeaders") { // Do the work - do not update the progress bar net2ftp_module_sendHttpHeaders(); // Update the consumption statistics $net2ftp_globals["endtime"] = microtime(); $net2ftp_globals["time_taken"] = timer(); addConsumption(0, $net2ftp_globals["time_taken"]); putConsumption(); // Exit to avoid sending non-header output (by net2ftp or other application) exit; } elseif ($action == "printJavascript") { } elseif ($action == "printCss") { } elseif ($action == "printBodyOnload") { } elseif ($action == "printBody") { } } elseif ($net2ftp_globals["state"] == "error") { logError(); return false; } else { $errormessage = __("Unexpected state string: %1\$s. Exiting.", $net2ftp_globals["state"]); setErrorVars(false, $errormessage, debug_backtrace(), __FILE__, __LINE__); logError(); return false; } }