PHP gzip test

Written by Tully on October 12, 2010 Categories: Apache, PHP

Today I wrote a quick script to download a web page with both a compressed(gzip) version and a non-compressed version. I wanted something quick that I could run from the command line. The PHP gzip script returns the size of the page in both gzipped and non-gzipped versions. It also calculates the time it took to download each version in seconds. One last feature of the script is that it downloads the page 10 times in both versions, and displays the average of both gzipped and non-gzipped compressed versions.

How to run the script:

tully@hydralisk:/tmp$ php download.php http://example.com

No-Compression:    85047 Time: 0.00 seconds

With-Compression:  11178 Time: 1.00 seconds

Downloading compressed and non-compressed versions 10 times each and then calculating average…

Non-Compressed version: 0.5

Compressed version: 0.35

function download($site, $gzip=0)
{
// Headers
$headers = array('Accept-Encoding: compress, gzip');
$ch = curl_init($site);
if ($gzip==1)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
return strlen($content);
}

if ($argc < 2) {
echo "Usage: php $argv[0]n";
} else {
$start = time();
echo "No-Compression:    ".download($argv[1]);
printf("tTime: %2.2f seconds n", number_format(((time() - $start))));
$start = time();
echo "With-Compression:  ".download($argv[1], 1);
printf("tTime: %2.2f seconds n", number_format(((time() - $start))));
}

echo "nDownloading compressed and non-compressed versionsn10 times each and then calculating average... n";
$times = array();
for($i=0;$i<20;$i++) {
$start = time();
download($argv[1]);
array_push($times, (time() - $start));
}
echo "Non-Compressed version: ".average($times) . "n";

$times = array();
for($i=0;$i<20;$i++) {
$start = time();
download($argv[1], 1);
array_push($times, (time() - $start));
}
echo "Compressed version: ".average($times) . "n";

// Helper to get average
function average(Array $a)
{
return array_sum($a) / count($a);
}
No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>