Skip to content

Instantly share code, notes, and snippets.

@enovision
Created March 1, 2013 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enovision/5064975 to your computer and use it in GitHub Desktop.
Save enovision/5064975 to your computer and use it in GitHub Desktop.
Script for uploading ZIP file and unzip it on the server (see first comment for usage)
<?php
/* Simple script to upload a zip file to the webserver and have it unzipped
Saves tons of time, think only of uploading Wordpress to the server
Thanks to c.bavota (www.bavotasan.com)
I have modified the script a little to make it more convenient
Modified by: Johan van de Merwe (12.02.2013)
*/
function rmdir_recursive($dir) {
foreach (scandir($dir) as $file) {
if ('.' === $file || '..' === $file)
continue;
if (is_dir("$dir/$file"))
rmdir_recursive("$dir/$file");
else
unlink("$dir/$file");
}
rmdir($dir);
}
if ($_FILES["zip_file"]["name"]) {
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$type = $_FILES["zip_file"]["type"];
$name = explode(".", $filename);
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
foreach ($accepted_types as $mime_type) {
if ($mime_type == $type) {
$okay = true;
break;
}
}
$continue = strtolower($name[1]) == 'zip' ? true : false;
if (!$continue) {
$message = "The file you are trying to upload is not a .zip file. Please try again.";
}
/* PHP current path */
$path = dirname(__FILE__) . '/'; // absolute path to the directory where zipper.php is in
$filenoext = basename($filename, '.zip'); // absolute path to the directory where zipper.php is in (lowercase)
$filenoext = basename($filenoext, '.ZIP'); // absolute path to the directory where zipper.php is in (when uppercase)
$targetdir = $path . $filenoext; // target directory
$targetzip = $path . $filename; // target zip file
/* create directory if not exists, otherwise overwrite */
/* target directory is same as filename without extension */
if (is_dir($targetdir))
rmdir_recursive($targetdir);
mkdir($targetdir, 0777);
/* here it is really happening */
if (move_uploaded_file($source, $targetzip)) {
$zip = new ZipArchive();
$x = $zip->open($targetzip); // open the zip file to extract
if ($x === true) {
$zip->extractTo($targetdir); // place in the directory with same name
$zip->close();
unlink($targetzip);
}
$message = "Your .zip file was uploaded and unpacked.";
} else {
$message = "There was a problem with the upload. Please try again.";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Unzip a zip file to the webserver</title>
</head>
<body>
<?php if ($message) echo "<p>$message</p>"; ?>
<form enctype="multipart/form-data" method="post" action="">
<label>Choose a zip file to upload: <input type="file" name="zip_file" /></label>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
</body>
</html>
@enovision
Copy link
Author

This script asks for a file from your PC and uploads it with HTTP. This can lead to limitations of your web server. So maybe you should look at unzip.php in this same gist repository

Steps to follow:

  1. create folder on the webserver called "zipper" or something else
  2. copy the following PHP code into a file called "zipper.php" into this folder
  3. use the url to this file to start the little script
  4. select a zip file from your harddisk and go for it

after upload a directory exists in the folder "zipper" from step 1
With ftp program (like fireftp or filezilla) you can easily move the content to the directory of your choice (that's all)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment