/install/installer/assets/helper.destroyer.php
PHP | 147 lines | 71 code | 17 blank | 59 comment | 23 complexity | c0f07e4497dc245e258983f6e2de4ec7 MD5 | raw file
- <?php if(!defined('INST_BASEDIR')) die('Direct access is not allowed!');
-
- /* ====================================================================
- *
- * PHP Setup Wizard
- *
- * -= SELF-DESTRUCTION =-
- *
- * This file contains functions that are used to delete ALL the files
- * inside the Installer folder. Be VERY careful with this script and
- * only modify it if you are absolutly certain of what you are doing.
- *
- * ================================================================= */
-
- /**
- * You got to admit, that's pretty funny for a function name :)
- * What it does is simply trying to delete all the installer files
- * including this one!
- */
- function DeleteYourself()
- {
- /*
- * >>> IMPORTANT! <<<<
- *
- * NOTE: This code only provides you with the ability to completly make the Installer
- * remove itself from the webserver (if it can). HOWEVER - you can modify this
- * function to only delete SOME files or some spesific files rather than deleting
- * everything.
- *
- * Example: You have made a very descriptive "step-by-step" guide to how to get
- * this installer going. The file "installer.php" is only allowed to be
- * executed directly so this method could only delete that file. Then,
- * in your guide you could say "Delete the script file installer.php if
- * the Installer itself is unable to" - rather then saying delete the
- * Installer folder, which contains 55+ files including images etc.
- * Just a suggestion :)
- */
-
- global $config;
-
- // Read the base directory for files to delete and sort the array so that the longest
- // scopes are deleted first - example: base/aaa.txt base/folder/bbb.txt - then bbb.txt
- // will be the first because it has scope of 2, and aaa.txt has the scope 1
- $files = ReadFiles(INST_BASEDIR.INST_RUNFOLDER, $config['self_destruct_filter']);
- rsort($files);
-
- // Get all unique directories into one array and sort by scope as well
- $dirs = array();
- foreach($files as $file)
- {
- if(!isset($dirs[$file['dir']]))
- $dirs[$file['dir']] = $file['scope'];
- }
- arsort($dirs);
-
- // Success rate is stored
- $fileDelete = array('success'=>0, 'failed'=>0, 'total'=>count($files));
- $dirDelete = array('success'=>0, 'failed'=>0, 'total'=>count($dirs));
-
- // Begin with deleting the files
- foreach($files as $file)
- {
- if(unlink($file['dir'].$file['name']))
- $fileDelete['success']++;
- else $fileDelete['failed']++;
- }
-
- if($config['self_destruct_removes_folders'])
- {
- // And then delete the directories
- foreach($dirs as $dir=>$scope)
- {
- if(rmdir($dir))
- $dirDelete['success']++;
- else $dirDelete['failed']++;
- }
- }
- else
- {
- // Total reset to zero, so no folder should be
- // deleted, no success and no failure!
- $dirDelete['total'] = 0;
- }
-
- // Return back the success of deletion
- return array('dirs'=>$dirDelete, 'files'=>$fileDelete);
- }
-
-
- /**
- * Read everything in a folder, and recursivly go through all
- * subfolders to scan for more files. Define the files to include
- * in the read
- */
- function ReadFiles($dir, $filterExt=array())
- {
- $files = array();
- $checkFile = "";
- $extension = "";
-
- // Fix the separators in the path
- $dir = FixPath($dir);
- if(is_dir($dir))
- {
- if($opendir = opendir($dir))
- {
- // Read everything in the folder, $checkFile can be both
- // folder, file and for some reason '.' and '..'
- while(($checkFile = readdir($opendir)))
- {
- // Construct a subfolder variable and if that is
- // valid directory - scan those files first
- $subFolder = FixPath($dir.DIRECTORY_SEPARATOR.$checkFile);
-
- // If this is a directory - scan that folder
- // first before reading the files in here
- $fromFolder = array();
- if(is_dir($subFolder) && $checkFile != '.' && $checkFile != '..')
- $fromFolder = ReadFiles($subFolder, $filterExt);
-
- // Put all "from folder" files into the $files array
- foreach($fromFolder as $folderFile)
- $files[] = $folderFile;
-
- // Get file extension
- if(strrpos($checkFile, '.') != false)
- $extension = strtolower(substr($checkFile, (strrpos($checkFile, '.') + 1 )));
- else $extension = false;
-
- // If file has extension and either set to delete ALL extensions (empty array)
- // or this extension is in the array of "extensions to delete" - add to
- if($extension !== false && (count($filterExt) == 0 || in_array($extension, $filterExt)))
- {
- // To be sure its a file...
- if(filetype($dir.'/'.$checkFile) == "file")
- {
- $scope = count(explode(DIRECTORY_SEPARATOR, $dir));
- $files[] = array('scope'=>$scope, 'dir'=>$dir, 'name'=>$checkFile, 'ext'=>$extension);
- }
- }
- }
- closedir( $opendir );
- }
- }
-
- return $files;
- }