| 
<?php /**
 * PHP Extract files using ZipArchive
 * @author generasite
 * @link http://generasite.tk
 * @license under GNU GPL v2 or later
 */
 error_reporting(0);
 $timestart = microtime(TRUE);
 $timeend = microtime(TRUE);
 $time = $timeend - $timestart;
 /* Source File .zip or tar.gz */
 $getzip = $_POST['zipfiles'];
 /* New directory name and path for this file */
 $list_dir = ".";
 $getdir = $_POST['dirlist'];
 
 /* Generates a valid XHTML list of all directories in $directory */
 function scan_directories($directory, $extensions = array()) {
 /* Remove trailing slash */
 if ( substr($directory, -1) == "/" ) $directory = substr($directory, 0, strlen($directory) - 1);
 $code .= scan_directory($directory, $extensions);
 return $code;
 }
 
 /* Recursive function called by scan_directories() to list directories */
 function scan_directory($directory, $extensions = array()) {
 /* Get and sort directories */
 if ( function_exists("scandir") ) {
 $file = scandir($directory);
 }
 natcasesort($file);
 
 /* Make directories first */
 $files = $dirs = array();
 foreach($file as $this_file) {
 if ( is_dir("$this_file" ) ) $dirs[] = $this_file; else $files[] = $this_file;
 }
 $file = array_merge($dirs, $files);
 
 /* Filter unwanted extensions */
 if ( !empty($extensions) ) {
 foreach( array_keys($file) as $key ) {
 if ( !is_dir("$file[$key]") ) {
 $ext = substr($file[$key], strrpos($file[$key], ".") + 1);
 if ( !in_array($ext, $extensions) ) unset($file[$key]);
 }
 }
 }
 
 foreach( $file as $this_file ) {
 if ( is_dir("$this_file") ) {
 $scan_directories .= "<option value=\"".$this_file ."\">" . htmlspecialchars($this_file);
 $scan_directories .= "</option>";
 }
 }
 return $scan_directories;
 }
 
 /* Function called of .zip files in the directory */
 function zipfiles($list_dir) {
 if ($dh = opendir ( $list_dir )) {
 while ( false !== ( $filename = readdir( $dh ))) {
 if (pathinfo($filename, PATHINFO_EXTENSION) === 'zip' || pathinfo($filename, PATHINFO_EXTENSION) === 'gz') {
 $zipfiles[] = $filename;
 }
 }
 closedir($dh);
 }
 $zipp = array();
 
 foreach ($zipfiles as $zipfile) {
 $zipp[] = $zipfile;
 }
 $zipfiles = array_merge($zipp);
 
 foreach ($zipfiles as $zipfile) {
 $newfile .= "<option value=\"".$zipfile ."\">" . htmlspecialchars($zipfile);
 $newfile .= "</option>";
 }
 return $newfile;
 
 if (!empty($zipfile)) {
 $zipstatus = '<span class="required"> .zip or .gz files found, ready for extraction </span>';
 }
 else {
 $zipstatus = '<span class="required"> ERROR: No .zip or .gz files found.</span>';
 }
 }
 
 /* Extract .zip/.tar.gz archive using ZipArchive */
 
 /* Check if directory/file has been selected */
 if ($getdir || $getzip) {
 $path = pathinfo( realpath( $getzip ), $getdir );
 
 /* Check if webserver supports unzipping. */
 if ( ! class_exists('ZipArchive')) {
 $zipsupport = '<span class="required"> ERROR: Your PHP version does not support unzip functionality.</span>';
 }
 else {
 $zip = new ZipArchive;
 $res = $zip->open($getzip);
 if ($res === TRUE) {
 $zip->extractTo( $getdir );
 $zip->close();
 $zipsuccess = '<span class="success">SUCCESS! file: \''.$getzip.'\' extracted to directory: \''.$getdir.'\'</span>';
 }
 else {
 $zipsuccess = '<span class="required">ERROR! couldn\'t open file: \''.$getzip.'\'</span>';
 }
 }
 }
 else {
 $zipzip = '<span class="required">Please select directory or .zip first.!</span>';
 }
 ?>
 
 <!DOCTYPE html>
 <head>
 <title>PHP Extract Files</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <style type="text/css">
 <!--
 body {
 font-family: Arial, serif;
 line-height: 150%;
 }
 h1 {
 font-size: 20px;
 }
 .form {
 max-width: 400px;
 padding: 20px 12px 10px 20px;
 font-size: 13px "Lucida Sans Unicode","Lucida Grande",sans-serif;
 }
 .form li {
 padding: 0;
 display: block;
 list-style: none;
 margin-bottom: 10px;
 }
 .form label {
 margin: 0 0 3px 0;
 padding: 0;
 display: block;
 font-weight: bold;
 }
 .form input[type=text],.form input[type=date],.form input[type=datetime],.form input[type=number],.form input[type=search],.form input[type=time],.form input[type=url],.form input[type=email],textarea,select {
 box-sizing: border-box;
 -webkit-box-sizing: border-box;
 -moz-box-sizing: border-box;
 border: 1px solid #bebebe;
 padding: 7px;
 margin: 0;
 -webkit-transition: all .30s ease-in-out;
 -moz-transition: all .30s ease-in-out;
 -ms-transition: all .30s ease-in-out;
 -o-transition: all .30s ease-in-out;
 outline: 0;
 }
 .form input[type=text]:focus,.form input[type=date]:focus,.form input[type=datetime]:focus,.form input[type=number]:focus,.form input[type=search]:focus,.form input[type=time]:focus,.form input[type=url]:focus,.form input[type=email]:focus,.form textarea:focus,.form select:focus {
 -moz-box-shadow: 0 0 8px #88d5e9;
 -webkit-box-shadow: 0 0 8px #88d5e9;
 box-shadow: 0 0 8px #88d5e9;
 border: 1px solid #88d5e9;
 }
 .form .field-divided {
 width: 49%;
 }
 .form .field-long {
 width: 100%;
 }
 .form .field-select {
 width: 100%;
 }
 .form .field-textarea {
 height: 100px;
 }
 .form input[type=submit],.form input[type=button]
 {
 background: #4b99ad;
 padding: 8px 15px 8px 15px;
 border: 0;
 color: #fff;
 }
 .form input[type=submit]:hover,.form input[type=button]:hover {
 background: #4691a4;
 box-shadow: none;
 -moz-box-shadow: none;
 -webkit-box-shadow: none;
 }
 .required {
 color: red;
 }
 .success {
 color: green;
 }
 .status {
 margin-top: 20px;
 padding: 5px;
 font-size: 14px;
 background: #EEE;
 border: 1px dotted #DDD;
 }
 .copyright {
 margin-top: 20px;
 padding: 5px;
 font-size: 14px;
 }
 -->
 </style>
 </head>
 <body>
 <h1>PHP Extract Files</h1>
 <form action="" method="POST">
 <ul class="form">
 <li>
 <label>Select target directory <span class="required">*</span></label>
 <select name="dirlist" class="field-select">
 <?php echo scan_directories("$list_dir"); ?>
 </select>
 </li>
 <li>
 <label>Select .zip/.tar.gz file <span class="required">*</span></label>
 <select name="zipfiles" class="field-select">
 <?php echo zipfiles("$list_dir"); ?>
 ?>
 </select>
 </li>
 <li>
 <input type="submit" value="Submit"/>
 </li>
 </ul>
 </form>
 <div class="status">
 Status: <?php echo $zipsupport,$zipsuccess,$zipzip;?>
 <br/>
 Processing time: <?php echo $time; ?> ms
 </div>
 <div class="copyright">©<a href="https://generasite.tk/">generasite</a></div>
 </body>
 </html>
 
 |