There are a coupld of issues with this script that you could improve:
- You may need to set the PATH environment variable, or have the full path you your 'touch' and 'chmod' programs (or better yet, let 'open' create the file for you, and why not use the built in perl version of 'chmod').
- Check to make sure that the webserver can actually write to the directory that you have listed. Remember that the web server may run as a different user than what you normally use.
- You are not locking the file when you are writing to it. If you have two requests to this script concurently you could mess up the file.
- You are not returning anything to the browser. You need to return an image of some sort, and a full set of headers.
Here is your script with file locks. It always returns a clear gif to the browser even if the open failed.
#!/usr/bin/perl
use Fcntl ':flock';
use MIME::Base64;
use CGI qw(header);
my $file = "/home/master/webroot/perlskripts/ip.log";
if ( open(my $fh, '>>', $file) ) {
# lock the file
flock($fh,LOCK_EX);
# seek to the end in case someone altered
# the file since we opened it
seek($fh, 0, 2);
# add the entry to the file
print $fh "User from ".$ENV{'REMOTE_ADDR'}." logged on\n";
# unlock
flock($fh,LOCK_UN);
} else {
print STDERR "Could not open file for append: $!\n";
}
# always send a clear gif to the browser
my $q = CGI->new();
$q->header(-type => 'image/gif');
# The following is a base64 encoded 1x1 clear gif image
print MIME::Base64::decode_base64('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAA
+ALAAAAAABAAEAAAICRAEAOw==');
- Cees
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.