Categories
GIDBlog Learning Journal

Compress your PHP-FPM pages

Since the recent upgrade to gidblog.com, this web site is currently being hosted by various Docker containers. One of the Docker containers used is, of course, one derived from a Docker image like php:7-fpm-alpine.

I must confess that this is my first endeavour using PHP-FPM with Apache. All these years I have only been using the Apache module: mod_php to handle all my PHP web pages.

One of the areas I got stuck for a while (making this site work with PHP-FPM) is that PHP scripts — in this case generated web pages — were not sending gz-encoded data (compressed web pages) back to web browsers.

I know how to make Apache send compressed web pages and other documents using the Apache mod_deflate module.

I also know how to make individual PHP scripts turn output compression on.

Actually, reading that last link/page gave me the solution I was looking for – use the zlib.output_compression php.ini setting when creating my PHP-FPM Docker image.

So this was how my Dockerfile for the PHP-FPM/Alpine Linux image looks like with this setting all set up. See the last line:

File: Dockerfile

FROM php:7-fpm-alpine
RUN apk update; apk upgrade;
RUN docker-php-ext-install mysqli
RUN docker-php-ext-install opcache

# Other instructions removed for brevity #

# PHP.INI
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

# zlib compression
RUN echo "zlib.output_compression = On" >> "$PHP_INI_DIR/php.ini"

As soon as this Docker image was built again and running, all web pages generated by PHP-FPM for this web site are being compressed before being sent out to web browsers and clients that accept the encoding.

Categories
GIDBlog Learning Journal

WordPress Plugin for Google AdSense Auto Ads

I will show you how I inserted Google AdSense Auto Ads JavaScript ad code to this web site today.

The Google AdSense Auto Ads ad code is only a single line long, so it was unnecessary to get overly complicated with the plugin or PHP code.

Create file: gid-wp-google-adsense-auto-ads.php

Using my favourite text/PHP editor, I created a PHP file: gid-wp-google-adsense-auto-ads.php. This is how it looks:

<?php
/*
Plugin Name: GID WP Google AdSense Auto Ads
Plugin URI: https://www.gidblog.com/wordpress-plugin-google-adsense-auto-ads/
Description: Inserts Google AdSense Auto Ads, in the header.
Author: J de Silva
Version: 1.0
Author URI: https://www.gidblog.com/author/jdesilva/
*/

// Replace "NNNNNNNNNNNNNNNN" with your Google AdSense Publisher ID (just the 16-digit number)
define( "GID_GA_PUBID", "NNNNNNNNNNNNNNNN" );

function gid_google_adsense_autoads()
{
?>
<script data-ad-client="ca-pub-<?php echo GID_GA_PUBID; ?>" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<?php
}
add_action( 'wp_head', 'gid_google_adsense_autoads', 10 );

Do not forget to paste your own Google AdSense publisher ID (just the 16-digit number) in the PHP code before uploading the file. See line no. 12 above.

Upload gid-wp-google-adsense-auto-ads.php

Save the file and upload it to the /wp-content/plugins/ folder of your WordPress site. On my Linux laptop, with the scp command, this is as simple as:

scp -v $HOME/gid-wp-google-adsense-auto-ads.php [email protected]:/var/www/html/wp-content/plugins/

Finally, go to the Plugins page inside your WordPress site’s admin dashboard to activate this plugin.

Categories
GIDBlog Learning Journal

WordPress Plugin for Google Analytics

I will show you how I inserted Google Analytics tracking code to this web site today.

I chose to write a WordPress plugin to accomplish this task but since I only manage 2 WordPress sites, I didn’t develop it with a lot of bells and whistles.

gid-wp-google-analytics.php

Using my favourite text/PHP editor, I created a PHP file: gid-wp-google-analytics.php. This is how it looks:

<?php

/*
Plugin Name: GID WP Google Analytics
Plugin URI: https://www.gidblog.com/wordpress-plugin-google-analytics/
Description: Inserts Google Analytics tracking code to web pages, in the header.
Author: J de Silva
Version: 1.0
*/

// Replace "NNNNN-N" with your Google Analytics site tracking ID
define( "GID_GAID", "NNNNN-N" );

function gid_google_analytics()
{
	// <!-- Global site tag (gtag.js) - Google Analytics --> ?> 
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-<?php echo GID_GAID; ?>"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'UA-<?php echo GID_GAID; ?>');
  </script>
<?php
}
add_action( 'wp_head', 'gid_google_analytics', 10 );

Do not forget to paste your own Google Analytics tracking code ID in the PHP code before uploading the file. See line no. 12 above.

Upload gid-wp-google-analytics.php

Save the file and upload it to the /wp-content/plugins/ folder of your WordPress site. On my Linux laptop, with the scp command, this is as simple as:

scp -v $HOME/gid-wp-google-analytics.php [email protected]:/var/www/html/wp-content/plugins/

Finally, go to the Plugins page inside your WordPress site’s admin dashboard to activate this plugin.

Categories
Learning Journal

yii-user Extension “include(UserModule.php): failed to open stream” Error

Creating a new (Yii) controller and implementing access control for it with the yii-user extension, I got this PHP warning/error today:

Categories
Learning Journal

Yii Exception: Alias “user.UserModule” is invalid

I was attempting to get the Yii Framework yii-user extension working for a test web site earlier today when I got this fatal error / exception message:

Categories
Learning Journal

Class ‘HttpResponse’ Not Found

After I “upgraded” Fedora (to Fedora 19) on my main PC recently, I only had one other essential post-installation task to complete before I could get back to my regular programming on this machine. I just had to install the pecl_http PHP extension next.

Categories
Learning Journal

Match IP in CIDR

Recently, I needed a simple PHP function that will match an IP Address in a CIDR block.

Categories
Learning Journal

Multiple SQL Inserts in 1 Query

If your MySQL version is 3.22.5 or later, you can now INSERT multiple values / records in one single query. In most cases this is probably not useful but I recently found this out while trying to optimise my GIDTopsites script.

Categories
GIDApp

GIDApp No. 2

For my second Android™ project/application, which will remain unnamed for the moment, I will first need to gather some historical data from more than a couple of local (Malaysian) web sites. Some of this publicly available data go back as far as as 1985! It is insane to even contemplate fetching all this data by hand and so I had to come up with some kind of software to help me do that easily and quickly.

Categories
Learning Journal

Refresh / Redirect with PHP

We know how to use the Refresh meta tag in our <head> tags. But what if we needed to do the same thing, only this time, do it in PHP?