Since I have designed several styles over the year, I get a bit annoyed when I need to pack up those styles for a new release... that's where PHP comes to help me.
A quick example could help in understanding:
- I have several styles in one folder:
- black_pearl
- frozen_phoenix
- mg_autumn
- mg_xmas
- milky_way
- milky_way_red
- rainbow_pearl
- black_pearl
- I need to create a zip file for each of the above folders in a format like this:
- black_pearl_1_6_4_20110603.zip
- frozen_phoenix_1_6_4_20110603.zip
- mg_autumn_1_6_4_20110603.zip
- mg_xmas_1_6_4_20110603.zip
- milky_way_1_6_4_20110603.zip
- milky_way_red_1_6_4_20110603.zip
- rainbow_pearl_1_6_4_20110603.zip
- black_pearl_1_6_4_20110603.zip
- To do the job I just launch a PHP script
Here are the basic instructions:
- To be able to use this script you need pclzip.lib.php library which you will find in Icy Phoenix package or here: PCLZIP
- Create a folder where you will put all subfolders to be zipped in different ZIP files, suppose you call this folder backup.
- Put in the folder you just created pclzip.lib.php file
- Put in the folder you just created all the folders you want to be zipped into separate files
- Put this file (make_zip.php) in that folder (highlighted in red you will find the parts you may want to change):
<?php
/**
*
* @package Icy Phoenix
* @version $Id$
* @copyright (c) 2008 Icy Phoenix
* @license http://opensource.org/licenses/GPL-license.php GNU Public License
*
*/
include('pclzip.lib.php');
@set_time_limit(0);
//@ignore_user_abort(true);
@ini_set('memory_limit', '128M');
$style_version = '_1_6_4';
$date_suffix = '_' . date('Ymd');
$source_array = array('black_pearl', 'frozen_phoenix', 'mg_autumn', 'mg_xmas', 'milky_way', 'milky_way_red', 'rainbow_pearl');
output_header('Creating Styles ZIP Packs');
$styles_counter = count($source_array);
for ($i = 0; $i < $styles_counter; $i++)
{
$dest_path = $source_array[$i] . '/' . $source_array[$i];
echo('<hr /><b style="color:#dd2222;">Working on ' . $source_array[$i] . '</b><br />');
// Kill BAK
echo('<b style="color:#224488;">Deleting bak files</b>');
flush();
$bak_files = array();
$bak_files = list_files_type($dest_path, 'bak');
for ($j = 0; $j < count($bak_files); $j++)
{
@unlink($bak_files[$j]);
}
echo(' ... <b style="color:#228822;">DONE!!!</b><br />');
flush();
// Create ZIP package
$zip_filename = 'phpbb3_' . $source_array[$i] . $style_version . '.zip';
echo('<b style="color:#224488;">Creating ' . $zip_filename . '</b>');
flush();
if (file_exists($zip_filename))
{
@unlink($zip_filename);
}
$all_files_list = array();
$all_files_list = list_files($dest_path);
if (isset($zip))
{
unset($zip);
}
$zip = new PclZip($zip_filename);
@chmod($zip_filename, 0777);
$zip->add($all_files_list, $p_add_dir = '', $p_remove_dir = $source_array[$i]);
echo(' ... <b style="color:#228822;">DONE!!!</b><br /><hr />');
flush();
}
output_footer();
exit;
function output_header($page_title = 'Files List')
{
echo('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . "\n");
echo('<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-gb" xml:lang="en-gb">' . "\n");
echo('<head><title>' . $page_title . '</title></head>' . "\n");
echo('<body style="font-family:\'Courier New\', \'Trebuchet MS\', Verdana, Tahoma;font-size:12px;">' . "\n");
flush();
return true;
}
function output_footer()
{
echo('</body>' . "\n" . '</html>');
flush();
return true;
}
function list_files($source_folder)
{
$directory = @opendir($source_folder);
$files_list = array();
while (@$file = readdir($directory))
{
$full_path_file = $source_folder . '/' . $file;
if (!in_array($file, array('.', '..')))
{
if (is_dir($source_folder . '/' . $file))
{
$files_list = array_merge($files_list, list_files($full_path_file));
}
else
{
$files_list[] = str_replace('//', '/', ($full_path_file));
}
}
}
@closedir($directory);
sort($files_list);
return $files_list;
}
function list_files_type($source_folder, $extension)
{
$directory = @opendir($source_folder);
$files_list = array();
while (@$file = readdir($directory))
{
$full_path_file = $source_folder . '/' . $file;
if (!in_array($file, array('.', '..')))
{
if (is_dir($source_folder . '/' . $file))
{
$files_list = array_merge($files_list, list_files_type($full_path_file, $extension));
}
else
{
$file_details = get_file_details($full_path_file);
if ($file_details['ext'] == $extension)
{
$files_list[] = str_replace('//', '/', ($full_path_file));
}
}
}
}
@closedir($directory);
sort($files_list);
return $files_list;
}
function get_file_details($file_name)
{
$file_details = array();
$file_tmp = str_replace ('http://', '', $file_name);
$file_path[] = array();
$file_path = explode('/', $file_tmp);
$file_details['name_full'] = $file_path[count($file_path) - 1];
$file_part = explode('.', strtolower($file_details['name_full']));
$file_details['ext'] = $file_part[count($file_part) - 1];
$file_details['name'] = substr($file_details['name_full'], 0, strlen($file_details['name_full']) - strlen($file_details['ext']) - 1);
return $file_details;
}
?>
- You just need to make sure you edit this portion of code including a version number (if you want, otherwise you can leave that empty!) and listing all the folders you want to be zipped... timestamp will be added automatically:
$style_version = '_1_6_4';
$date_suffix = '_' . date('Ymd');
$source_array = array('black_pearl', 'frozen_phoenix', 'mg_autumn', 'mg_xmas', 'milky_way', 'milky_way_red', 'rainbow_pearl');
- If you did everything correctly, by launching make_zip.php all ZIP files will be created for the listed folders.
- Remember to CHMOD 0777 the backup folder (the folder where you put all the folders and make_zip.php).
I hope you will find this snippet and quick tutorial useful.