Issue
What I am trying to accomplish is a simple PHP pageview counter for each of my PHP pages, I know this can be accomplished with MYSQL database as well, but I just want a simple page view counter with strictly PHP (Which I already accomplished).
I already found a script that works, but it only displays views for one page, I was wondering, if there was a way to edit the code so that with each page I include the counter, the number of views would be different for that page.
The website I found the instructions to follow is http://tutorial.world.edu/web-development/how-to-create-page-view-hit-counter-code-using-php-script/
And this is my code, that I edited to my needs:
function pageview_counter()
{
if (isset($visitor)) {
if ($visitor == "visited")
include("pageview-counter.txt");
} else {
$file = fopen("pageview-counter.txt", "r+");
$result = fread($file, filesize("pageview-counter.txt"));
fclose($file);
$result += 1;
$file = fopen("pageview-counter.txt", "w+");
fputs($file, $result);
fclose($file);
include("pageview-counter.txt");
}
}
And for the counter:
<p class="num-of-views">Views: <strong><?php echo pageview_counter(); ?></strong></p>
I created the text file in my website directory as directed, I just want to know if what I want can actually be accomplished. Any help will be greatly appreciated!
Solution
As commented before, a MySQL database would be the better option here, but if you insist on using a file instead, I would go with a custom INI file:
page1 = 0
page2 = 0
page3 = 0
You can add as many pages as you want and change their names of course. Just save that as pageCounts.ini
. Next you’re going to need to be able to read and write to this ini file. I suggest creating a seperate PHP file for this and include it in the pages:
<?php
// Parse the ini file (Read)
$ini = parse_ini_file("pageCounts.ini");
// Save to ini file (Write)
function write_php_ini($array, $file = "pageCounts.ini")
{
$res = array();
foreach($array as $key => $val)
{
if(is_array($val))
{
$res[] = "[$key]";
foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"');
}
else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"');
}
safefilerewrite($file, implode("\r\n", $res));
}
function safefilerewrite($fileName, $dataToSave)
{ if ($fp = fopen($fileName, 'w'))
{
$startTime = microtime(TRUE);
do
{ $canWrite = flock($fp, LOCK_EX);
// If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
if(!$canWrite) usleep(round(rand(0, 100)*1000));
} while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5));
//file was locked so now we can store information
if ($canWrite)
{ fwrite($fp, $dataToSave);
flock($fp, LOCK_UN);
}
fclose($fp);
}
}
?>
Source: How to read and write to an ini file with PHP
Save it as iniOperations.php
and include it in the pages where you need a counter. Change page1
to the page where you’re including the counter.
<?php
// Include iniOperations.php if it isn't included yet
require_once "iniOperations.php";
// Show the current number of visits:
echo "Number of visits to this page: ". $ini["page1"];
// Increase the number of visits by 1 and write to ini file
$ini["page1"]++;
write_php_ini($ini);
?>
Answered By – icecub
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0