Make a PHP Hit Counter
Hit counters are a popular feature among new and experienced webmasters alike. There are several different methods of including a hit counter on your site, but this manual focuses on a specific implementation in PHP. It is assumed you are operating in a LAMP (Linux, Apache, MySQL, PHP) environment and have some control over the server. If you don't, you may need to tailor the instructions to suit your specific environment. The database queries used to create this setup are listed in the Database Queries section.
Contents
Steps
Setting up the Database
- Create a new database. If you already have a database, username, and password, you can skip this step. If you do not have access to a MySQL console, you'll want to enter this query in phpMyAdmin or another online query tool. If your web host provides you with a username and database already (and you have no control over creating more), use those and skip this step.
- Create a database user. If you're at this step, then it is assumed you are logged into MySQL with a root account and want to create a separate user to access the hit counter. If this does not apply, use whatever username you already have for accessing the database. Be sure to use your own credentials, not the ones used in this example. Grant the user permissions to your database.
- Create the hit_counter table. This table will keep track of the number of hits we get. Use the table structure as shown in the image.
Creating the Hit Counter
- Create a new file called "HitCounter.php". This file will contain a class you can include in other PHP scripts when you want it to log a hit.
- Stub out the HitCounter class. Create local class members to hold your credentials and the database connection info.
- Write the constructor. In the constructor, you should establish the database connection and initialize the hit counts at zero.
- Write the public functions. These methods can be called from any other script that instantiates the HitCounter class.
- Add a method for processing views. This method gets called on every page load that should be counted towards a hit.
- Add a getter for the total views. This will get called in places where you want to show the total view count.
- Add a getter for the unique hits. You'll call this where you want to show the unique view count.
- Fill in the remaining helper methods. These methods do the brunt of the work for the hit counter. They're marked private so that they can only be used internally.
getData()
retrieves the current view counts from the database. If there isn't any data, it sets this data to zero.isNewVisitor()
determines whether the visitor has already visited our website in their current sessionvisit()
increments the total hit counter, and increments the unique visitor counter if the user has not visited the website in their current session.
Using the Hit Counter
- Create a new file to use your hit counter. This should be an actual page you intend the visitor to see. If you already have a website, this should be the front facing PHP script (usually index.php). Basically, any PHP file that is accessible from the web and you want to use to update the counter.
- Include the file containing the HitCounter class. It's recommended to use require_once over include.
- Call the views processor. This will tell the hit counter to update the counts. It's also necessary to get the current counts for display.
- Display your view counts. You can choose to show either the total number of hits or only the unique hits. It can be embedded anywhere HTML it output by the PHP script.
- Test your hit counter. Your hit counters should now increment appropriately when you view your web page. If you keep refreshing, your total hit count will increase but your unique session count will stay the same. This is good.
Database Queries
Tips
- If you get a warning about $_SESSION['visited'] not being set, that's normal. You can disable it by adding
error_reporting(E_ALL ^ E_NOTICE);
to the top of your PHP file. - Sometimes you might want to reset the view counts. You can do that with this query:
UPDATE hit_counter SET total_hits = 0, unique_hits = 0;
. - You can destroy sessions with session_destroy() in the PHP script (any point after session_start() has been called), or to destroy just your own session, restart your browser
- A hit counter is intended for the public, not the webmaster. If you want to see your traffic with better metrics, consider Google Analytics.
Related Articles
- Set Up a PHP Development Environment
- Learn PHP and MySQL
- Create a Secure Login Script in PHP and MySQL
- Comment in PHP
- Create a Secure Session Management System in PHP and MySQL