top of page

AN.I.'s Implementations: Server-Side Compression for PHP

Updated: Mar 31




How can you implement server-side compression for PHP?


Implementing server-side compression for a PHP application can significantly decrease the size of the transmitted data and hence improve server response time. There are different methods to enable compression; here are some popular approaches:


 Using Apache `.htaccess`

If your server is running Apache, you can enable compression with the `mod_deflate` module by adding these directives to your `.htaccess` file:


```apache

<IfModule mod_deflate.c>

   Compress HTML, CSS, JavaScript, Text, XML and fonts

  AddOutputFilterByType DEFLATE application/javascript

  AddOutputFilterByType DEFLATE application/rss+xml

  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject

  AddOutputFilterByType DEFLATE application/x-font

  AddOutputFilterByType DEFLATE application/x-font-opentype

  AddOutputFilterByType DEFLATE application/x-font-otf

  AddOutputFilterByType DEFLATE application/x-font-truetype

  AddOutputFilterByType DEFLATE application/x-font-ttf

  AddOutputFilterByType DEFLATE application/x-javascript

  AddOutputFilterByType DEFLATE application/xhtml+xml

  AddOutputFilterByType DEFLATE application/xml

  AddOutputFilterByType DEFLATE font/opentype

  AddOutputFilterByType DEFLATE font/otf

  AddOutputFilterByType DEFLATE font/ttf

  AddOutputFilterByType DEFLATE image/svg+xml

  AddOutputFilterByType DEFLATE image/x-icon

  AddOutputFilterByType DEFLATE text/css

  AddOutputFilterByType DEFLATE text/html

  AddOutputFilterByType DEFLATE text/javascript

  AddOutputFilterByType DEFLATE text/plain

  AddOutputFilterByType DEFLATE text/xml

</IfModule>

```

Ensure that you have the `mod_deflate` module installed and enabled.


 Using Nginx

If you're using Nginx, compression is handled by the `ngx_http_gzip_module`. In your Nginx configuration file (often found at `/etc/nginx/nginx.conf` or within the `/etc/nginx/conf.d/` directory), you can add or modify the following directives:


```nginx

http {

    gzip on;

    gzip_vary on;

    gzip_proxied any;

    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    gzip_comp_level 6;

    gzip_buffers 16 8k;

    gzip_min_length 256;

}

```

Adjust the settings to suit your needs, and then restart Nginx.


 PHP `ob_gzhandler()`

You can also enable compression directly in PHP by using `ob_gzhandler()` in your script:


```php

if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler");

else ob_start();

```


This method will not be as efficient as using web server level compression, and it can be less effective for certain types of content or with server configurations that disable output buffering.


 Testing Your Compression

After you've implemented compression, it's crucial to test if it's working. Use tools like Google PageSpeed Insights, GTMetrix, or check the response headers using browser developer tools (look for `Content-Encoding: gzip` or `Content-Encoding: deflate`).


 Caveats

1. Check your hosting service or server configuration documentation; managed hosts often have their methods for enabling compression.

2. Test your website's performance before and after enabling compression to ensure it's having the desired effect.

3. Remember that not every file type benefits from compression; for example, most media files (like images, videos, etc.) are already compressed.


Enabling server-side compression can dramatically improve the performance of your PHP application if implemented correctly and combined with other optimization strategies.


I'm using Nginx, can you provide the configuration for enabling compression?


Certainly! Enabling compression in Nginx can improve response times by decreasing the size of the data sent to clients. You can enable compression using the `gzip` module.


Here is an example of how to configure gzip in your `nginx.conf` or any other configuration file included by it, typically placed inside the `/etc/nginx/` directory:


```nginx

http {

    ...


    

     Gzip Settings

    


    gzip on;

    gzip_vary on;

    gzip_proxied any;

    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    gzip_buffers 16 8k;

    gzip_comp_level 6;

    gzip_min_length 256;

    gzip_http_version 1.1;

    gzip_disable "MSIE [1-6]\.(?!.*SV1)";


    ...

}

```


In this configuration:


- `gzip on;` – This directive turns on gzip compression.

- `gzip_vary on;` – This directive tells proxies to cache both gzipped and regular versions of a resource.

- `gzip_proxied any;` – This directive enables gzip compression for all proxied requests.

- `gzip_types` – Specifies the MIME types for which to enable compression. Common types for web content are included in the example.

- `gzip_buffers` – Sets the number and size of buffers used to compress data.

- `gzip_comp_level` – Sets the compression level where 1 is the least compression (fastest) and 9 is the most (slowest).

- `gzip_min_length` – Sets the minimum length of a response that gets compressed.

- `gzip_http_version` – Enables gzip compression for requests with HTTP versions 1.1 and above.

- `gzip_disable` – Disable gzip for certain browsers (in this case, IE 6 and earlier).


After editing, save and close the file. Test the configuration for syntax errors by running:


```bash

nginx -t

```


If the configuration is OK, reload Nginx to apply the changes:


```bash

sudo systemctl reload nginx

```


or


```bash

sudo service nginx reload

```


Check your website with a tool like Google PageSpeed Insights or GTmetrix to see the effects of enabling compression on your server response times. Remember to consider other performance aspects like optimizing images, caching static resources, and using a content delivery network (CDN) for even better results.


bottom of page