This code snippet actually contains a few nifty things. There are two functions, hasVisited() and main(). hasVisited() makes use of a very handy function for CGI programmers: getenv. You can see I use it to retrieve REMOTE_ADDR which is the person's IP address. In main() it gets the count from a file and increments if needed and outputs back to the same file. It then outputs a simple HTML page that the user sees.
C++ CGI Unique & Raw Hit Counter
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool hasVisited()
// Figure out wether unique hit or not
// Returns true if ip address has visited
{
bool visited = false;
string userIP = getenv("REMOTE_ADDR");
string nonUnique;
ifstream input("iplist.cnt");
while (input) { // See if IP is in list
getline(input, nonUnique);
if (userIP == nonUnique) {
visited = true;
break;
}
}
input.close();
if (visited == false) { // Add IP to list
ofstream output("iplist.cnt", ofstream::app);
output << userIP << endl;
output.close();
}
return (visited);
}
int main() {
int uniqueHits; // Default in case no counter file exists
int rawHits;
ifstream in("counter.cnt");
if (!in) {
uniqueHits = 0;
rawHits = 0;
}
else {
in >> uniqueHits; // 1st number = unique hits
in >> rawHits; // 2nd number = raw hits
in.close();
}
bool visited = hasVisited();
rawHits++;
if (!visited)
uniqueHits++;
ofstream out;
out.open("counter.cnt");
out << uniqueHits << ' ' << rawHits;
out.close();
cout << "Content-type: text/html" << endl << endl
<< "<HTML><BODY>" << endl
<< "This is a hit counter written in C++. <hr>" << endl
<< "Your IP address: " << getenv("REMOTE_ADDR") << ".";
if (visited)
cout << "(Not unique)";
else
cout << "(Unique)";
cout << "<hr>" << endl
<< "Unique hits: " << uniqueHits << "<br>Raw hits: " << rawHits << endl;
cout << "</BODY></HTML>" << endl;
}
sneekula 969 Nearly a Posting Maven
manutd 2 Junior Poster
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster
manutd 2 Junior Poster
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster
manutd 2 Junior Poster
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.