Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

is there something wrong with this code?

by emcb (Beadle)
on May 18, 2002 at 21:20 UTC ( #167558=perlquestion: print w/replies, xml ) Need Help??
emcb has asked for the wisdom of the Perl Monks concerning the following question:


I have written this little piece of code to act as a sucessful-hit logger on my home-page and i cant for the life of me get it to work.

Here's the code if anyonw wouldnt mind taking a look:

#!/usr/bin/perl # # To use this just insert this line into any html file you # want to hit: # # <!--exec cgi="/cgi-bin/hitlogger.cgi"--> # print "Content-Type: text/html\n\n"; print "HELLO\n"; # Gather all of the log strings $dateprog = "/bin/date"; $server_protocol = $ENV{'SERVER_PROTOCOL'}; $remoth_host = $ENV{'HTTP_X_FORWARDED_FOR'} || $ENV{'REMOTE_ADDR'}; $user_agent = $ENV{'HTTP_USER_AGENT'}; $request_method = $ENV{'REQUEST_METHOD'}; $request_uri = $ENV{'REQUEST_URI'}; $request = "$request_method $request_uri $server_protocol"; $date = `$dateprog`; chomp $date; $log_strig = "$remote_host - - [$date] \"$request\" 200 -"; # open the log and output the log string open( LOG, ">/home/exposu/logs/web_access.log.txt" ) || die "$!\n"; print LOG "$log_string\n"; close LOG;



Replies are listed 'Best First'.
•Re: is there something wrong with this code?
by merlyn (Sage) on May 18, 2002 at 21:22 UTC
    There's something wrong with the code in principle: as in, hit counters are bad -- you should be grepping the logs instead, and even those are wrong because of proxies and caching.

    But specifically, this code:

    open( LOG, ">/home/exposu/logs/web_access.log.txt" ) || die "$!\n";
    makes this a "one hit wonder". {grin} Each new hit overwrites the previous file instead of appending it. Change your > to a >> there.

    -- Randal L. Schwartz, Perl hacker

      I realiased this and hit back to change it and re-submit after preview, but it did'nt work. And im ashamed that i left out the '-w'! Sorry the open has the '>>' but i cant edit it now, or can i?
Re: is there something wrong with this code?
by DamnDirtyApe (Curate) on May 18, 2002 at 22:14 UTC
    Two comments here:
    1. use strict; would inform you of at least two typos in your variable names -- $remoth_host and $log_strig.
    2. Do the permissions on the dir/file you are attempting to write to allow write access to your web server? If not, no log.
    Hope that helps steer you in the right direction.
    D a m n D i r t y A p e
    Home Node | Email
Re: is there something wrong with this code?
by perigeeV (Hermit) on May 19, 2002 at 11:34 UTC

    <!--exec cgi="/cgi-bin/hitlogger.cgi"-->

    You're missing the hash before exec: <!--<bold>#</bold>exec...
    When you use the exec SSI, script output is not included into the document. I assume that's what you intend with print "HELLO\n";. For that you need to use

    <!--#include virtual="/cgi-bin/hitlogger.cgi"-->

    Here's the docs.

    There are plenty of log analysis tools out there, though.

Re: is there something wrong with this code?
by Parham (Friar) on May 19, 2002 at 13:46 UTC
    i noticed this which doesn't seem right:
    $log_strig = "$remote_host - - [$date] \"$request\" 200 -";
    you might want to add the 'n' in $log_strig, same goes for $remoth_host.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://167558]
Approved by cjf
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2017-09-19 17:51 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (226 votes). Check out past polls.