There is a perfectly good chance that at the present time, your site is sending pages in an uncompressed form to users. That is perfectly normal - in fact it is pretty much standard - but there is a better way to send your data. Some browsers (not all, but some) can accept "gz-encoded" data, which means the data is compressed.
PHP includes functions for sending pages in a "gz-encoded" form. However, this can be a pain to add to large files. There is a much easier way to add gzip functionality to your site than editing every page on it.
To achieve this effect, we are going to be using one of the most powerful, yet least used, of the features of htaccess. In an htaccess file, we can include the following lines:
php_value auto_prepend_file /full/path/to/begin_gzip.phpphp_value auto_append_file /full/path/to/end_gzip.php
The auto_prepend_file and auto_append_file commands are excellent in the right hands. They allow you to include files in all php scripts, without actually needing to use the include() function or the require() function. That makes it very very easy to handle includes, and even easier to add in new functionality to a site without actually needing to touch the PHP itself.
In this instance, we are using two files. The first line is the equivalent of adding include("begin_gzip.php") at the start of each PHP file. The second is the equivalent of adding include("end_gzip.php") at the end of each PHP file.
In the files themselves, we need to add in the functionality to control output buffering, and tell PHP to compress the data, if the user can receive it. A user-agent (like a browser) sends a header to a server indicating if it can receive "gz-encoded" data. If it can't, the server won't send back "gz-encoded" data - so there is no risk here that users may be unable to view your site. All that can happen is that the majority of users will see your site a bit quicker, and your bandwidth bills should drop.
Note: Please be aware that if your site is already using output buffering, the following scripts may not have the desired effect. In addition, output buffering with gz encoding is not available in versions of PHP previous to 4.0.5.
The first file, begin_gzip.php, needs to contain the following, which tells the PHP parser to begin output buffering, and that output will be gz encoded.
<?phpob_start("ob_gzhandler");?>
The second file, end_gzip.php, needs to contain the following. This will tell the PHP parser to send the contents of the buffer to the user.
<?phpob_flush();?>
Last, you need to include the two lines at the beginning of this tutorial to your htaccess file, remembering to change the path to the PHP files as required. If you do not yet have an htaccess file, open a blank document in a text editor, paste the two lines above into it, and save it. You need to upload it to your web server, and rename it to ".htaccess" (htaccess is the extension, and there must be no file name).
And there you go - your PHP based pages should now be sending data in a compressed format to those users that can handle it, and without any editting to your current site whatsoever.
AddedBytes.com is the online playground of 
Now I can see it happening again with my current project -- httpd complains it couldn't find and prepend a file from distant, unrelated project directory. I'm going to throw away those auto_prepends.
As far as I can tell it is a bug in Apache and thus related with auto_prepend, not output buffering.