| 
	
 | 
 Posted by petersprc on 10/24/06 18:06 
Hi, 
 
Try setting error_reporting(E_ALL) and watch for any errors. Pls paste 
your script that uses the class... 
 
By default you'll need a web-writable directory called "logs" located 
in the same directory where the class file is. 
 
mistral wrote: 
> "petersprc@gmail.com wrote: 
> " 
> > Johnny is right. Here's some code I've used before that does something 
> > similar. This will log the request to a flat file then redirect the 
> > user: 
> 
> > <? 
> 
> > // 
> > // Class SimpleRedirectLog 
> > // 
> > // Create a simple redirect log. Sample usage: 
> > // 
> > //     SimpleRedirectLog::logRedirect('file.zip'); 
> > // 
> > // That will update a file called "logs/file.zip-access-log.csv" 
> > // with the IP address of the client and the number of times the 
> > // URL has been accessed. The client will be redirected to "file.zip". 
> > // 
> > 
> > class SimpleRedirectLog 
> > { 
> >   function logRedirect($url, $logPath = null) 
> >   { 
> >     if (SimpleRedirectLog::logAccess($url, $logPath) !== false) { 
> >       header("Location: $url"); 
> >       return true; 
> >     } 
> >     return false; 
> >   } 
> > 
> >   function logAccess($url, $logPath = null) 
> >   { 
> >     $ok = false; 
> >     $counter = 0; 
> > 
> >     if (is_null($logPath)) { 
> >       $logPath = dirname(__FILE__) . '/logs/' . 
> >         preg_replace('#[/\\\]#', '_', $url) . 
> >         '-access-log.csv'; 
> >     } 
> > 
> >     if (!($fh = fopen($logPath, 'a+'))) { 
> >       trigger_error('Failed to open log file.'); 
> >     } elseif (!flock($fh, LOCK_EX)) { 
> >       trigger_error('Failed to lock log file.'); 
> >     } elseif (($size = filesize($logPath)) === false) { 
> >       trigger_error('Failed to get log file size.'); 
> >     } else { 
> >       $err = false; 
> >       if ($size > 0) { 
> >         // Get the current counter value 
> >         $val = ''; 
> >         $offset = -1; 
> >         for (;;) { 
> >           if (fseek($fh, $offset--, SEEK_END) !== 0) { 
> >             trigger_error("Failed to retrieve counter."); 
> >             $err = true; 
> >           } elseif (($c = fgetc($fh)) === false) { 
> >             break; 
> >           } elseif ($c == ',') { 
> >             if (!preg_match('/^[1-9][0-9]*$/', $val)) { 
> >               trigger_error("Stored counter is invalid: \"$val\"."); 
> >               $err = true; 
> >             } else { 
> >               $counter = intval($val); 
> >             } 
> >             break; 
> >           } elseif ($c != "\r" && $c != "\n") { 
> >             $val = $c . $val; 
> >           } 
> >         } 
> >         if (fseek($fh, 0, SEEK_END) !== 0) { 
> >           trigger_error("Failed to seek in log file."); 
> >           $err = true; 
> >         } 
> >       } 
> >       if (!$err) { 
> >         $entry = 
> >           SimpleRedirectLog::csvEncode(date('Y/m/d G:i:s')) . ',' . 
> >           SimpleRedirectLog::csvEncode($url) . ',' . 
> >           SimpleRedirectLog::csvEncode($_SERVER['REMOTE_ADDR']) . ',' . 
> >           ($counter + 1) . "\n"; 
> >         if (!fwrite($fh, $entry)) { 
> >           trigger_error('Failed to write log data.'); 
> >         } else { 
> >           $ok = true; 
> >         } 
> >       } 
> >     } 
> > 
> >     if ($fh && !fclose($fh)) { 
> >       trigger_error('Failed to close log file.'); 
> >       $ok = false; 
> >     } 
> > 
> >     return $ok ? $counter : false; 
> >   } 
> > 
> >   function csvEncode($str) 
> >   { 
> >     if (preg_match("/[,\"\r\n]/", $str)) { 
> >       $str = '"' . preg_replace('/([" \\\\])/', '\\\\\1', $str) . '"'; 
> >     } 
> >     return $str; 
> >   } 
> > } 
> > 
> > ?> 
> > 
> > You could modify this to use readfile() if you want to send the file 
> > directly from PHP instead of using a redirect. 
> > 
> > mistral wrote: 
> > > "Johnny писал(а): 
> > > " 
> > > > "mistral" <polychrom@softhome.net> wrote in message 
> > > > news:1161631139.229252.75610@e3g2000cwe.googlegroups.com... 
> > > > > I use htaccess to protect directory and granting access to download 
> > > > > file only for the authorized users. Just want implement simple PHP file 
> > > > > download counter for single file. I need track the number of downloads 
> > > > > of this file on my website, IP address and date. Since I have no access 
> > > > > to Apache log files, I need some other way, use script that will write 
> > > > > a log file. Is there some handy way? 
> 
> > M. 
> > ----------- 
> > Write a script that supplies the file download with the correct mime type 
> > and in that script record the details you want to the place you want... 
> 
> > ----------------- 
> 
> > How to interface this with htaccess? I am new in Php, perhaps there is 
> > ready scripts written for this tasks? 
> 
> > M. 
> 
> ------------------ 
> 
> I tried script, but not work for me. What variables need be edited? 
>  
> M.
 
  
Navigation:
[Reply to this message] 
 |