This script acts like a one time {strip} tag, removing all unnecessary white spaces from your .html files generated by the HTML Catalog, thus reducing the bandwidth needed for these files.
At the moment, I don't have a .tpl interface written for it, so you have to call it from your browser. This works on your existing catalog, though I am sure you could pull out the regex code and stick it into admin/html_catalog.php if your so inclined.
Here is the code. Put it in whatever directory you wish under whatever name you wish (.php extension of course)...
Code:
<!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=iso-8859-1" />
<title>HTML Catalog Cleaner</title>
</head>
<body>
<?php
######################################################
## ## HTML Catalog Cleaner ## ##
######################################################
## ##
## Strips every file in the HTML catalog directory ##
## of all excess white spaces. ##
######################################################
## Version: 1.0.0 (6/26/2004)
## Last updated: 1.0.4 6/26/2004
# Function to Clean-up #
########################
function script_shutdown() {
ini_set('max_execution_time', '30'); // Reset the maximum execution time.
ini_set('max_input_time', '60'); // Reset the maximum input time.
ob_implicit_flush(0); // Data should be kept in the buffer until ready.
}
register_shutdown_function('script_shutdown'); // Register the shutdown function.
# Modify PHP Settings #
#######################
ini_set('max_execution_time', '14400'); // Make the maximum execution/input time 4 hours so that the script doesn't time-out.
ini_set('max_input_time', '14400');
ini_set('zlib.output_compression_level', 'Off'); // Turn off zlib compression, if On, to prevent Mozilla output problems.
ob_implicit_flush(1); // Show the progress in the browser.
echo "Stripping the HTML files of excess spaces...
";
# Initialize variables.
$dir = '/home/your-site-dir/path-to-xcart/catalog'; // Set the absolute directory path.
$successes = 0;
$failures = 0;
$filesize['init'] = 0;
$filesize['final'] = 0;
$cnt['tmp'] = 0; // Newline counter
$cnt['tot'] = 0; // Totals counter
$pblr = 0; // Progress bar length reducer
# Initialize settings.
$regex = array(''=>'/[\t\n\r\f]+/', // Newlines and tabs
' '=>'/ +/', // Excess spaces
''=>'/ /i', // Additional space after non-breaking space
'><'=>'/> </' // Space between HTML tags
);
# Open the directory and store the file list.
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
# Iterate over file list.
while (($filename = readdir($dh)) !== false) { // Use instead of scandir to skip some files.
if (strpos($filename,'.htm') !== false)
$file_list[] = $filename;
}
closedir($dh); // Close the directory.
}
# Perform specific operations on the files.
foreach ($file_list as $file) {
if (($fs_tmp = filesize($dir.DIRECTORY_SEPARATOR.$file)) !== false)
$filesize['init'] += $fs_tmp;
$file_contents = file_get_contents($dir.DIRECTORY_SEPARATOR.$file);
foreach ($regex as $replace=>$finds) // Do each replacement.
$file_contents = preg_replace($finds,$replace,$file_contents);
$fp = fopen($dir.DIRECTORY_SEPARATOR.$file, 'w'); // Truncate file, then apply the modifications.
if (!fwrite($fp,$file_contents)) {
$failure_list[] = $file; // Log failures.
$failures++;
} else {
$successes++;
}
fclose($fp);
if (($fs_tmp = filesize($dir.DIRECTORY_SEPARATOR.$file)) !== false)
$filesize['final'] += $fs_tmp;
if ($pblr == 5) { // Modify this number to reduce the length of progress bar in case of a lot of files.
echo '|'; // Show progess line.
$cnt['tmp']++; // Increment the newline counter.
$pblr = 0; // Reset pblr counter.
} else {
$pblr++;
}
$cnt['tot']++; // Increment totals counter.
if ($cnt['tmp']==300) { echo '
'; $cnt['tmp']=0; } // Reset the counter.
}
} else
die(''.$dir.' is not a directory!');
echo '
There were '.number_format($successes).' successful cleanings and '.number_format($failures).' failures out of a total of '.number_format($cnt['tot']).' files.</p>';
echo '
Your HTML Catalog files initially occupied '.number_format($filesize['init']).' bytes of disk space.';
echo '
They now occupy '.number_format($filesize['final']).' bytes of disk space.</p>';
if (isset($failure_list)) {
echo '
The following files could not be written:
';
foreach ($failure_list as $fail)
echo ''.$fail.'
';
}
?>
</body>
</html>
Let me know if you find any problems!