Вход Регистрация
Файл: public_html/awstats/awdownloadcsv.pl
Строк: 197
<?php
#!/usr/bin/perl -w
#------------------------------------------------------------------------------
# Free addition to AWStats Web Log Analyzer. Used to export the contents of
# sections of the Apache server log database to CSV for use in other tools.
# Works from command line or as a CGI. 
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#------------------------------------------------------------------------------
use CGI qw(:standard);

my $ALLOWDOWNLOAD=0;

# Disabled by default for security reason
if (! $ALLOWDOWNLOAD
{
    print(
"Error: You must first edit script to change ALLOWDOWNLOAD to 1 to allow usage of this script.n");
    print(
"Reason is that enabling this script may be a security hole as it allows someone to download/view details of your awstats data files.n");
    exit;
}

my $q               = new CGI;
my $outputFile      "";   # used to write the output to a file
my $inputFile       "";   # the fully qualified path to the input log database file
my $sectionToReport "";   # contains the tag to search for in the database file
my $startSearchStr  "BEGIN_";
my $endSearchStr    "END_";
my $startPrinting   0;    # flag to indicate that the start tag has been found
my $attachFileName  "";

# These parameters are used to build the input file name of the awstats log database
my $baseName        "";
my $month           "";
my $year            "";
my $day             "";
my $siteConfig      "";

if (
$q->param("outputFile")) {
  if (
$outputFile eq '') { $outputFile $q->param("outputFile"); }
}

if (
$q->param("inputFile")) {
  if (
$inputFile eq '') { $inputFile $q->param("inputFile"); }
}

if (
$q->param("section")) {
  if (
$sectionToReport eq '' ) { $sectionToReport $q->param("section"); }
}

if (
$q->param("baseName")) {
  if (
$baseName eq '' ) { $baseName $q->param("baseName"); }
}

if (
$q->param("month")) {
  if (
$month eq '' ) { $month $q->param("month"); }
}

if (
$q->param("year")) {
  if (
$year eq '' ) { $year $q->param("year"); }
}

if (
$q->param("day")) { $day $q->param("day"); }

if (
$q->param("siteConfig")) {
  if (
$siteConfig eq '' ) { $siteConfig $q->param("siteConfig"); }
}

# set the attachment file name to the report section
if ($sectionToReport ne '' ) {
  
$attachFileName $sectionToReport ".csv";
} else {
  
$attachFileName "exportCSV.csv";
}
print 
$q->header(-type=> "application/force-download", -attachment=>$attachFileName);

# Build the start/end search tags
$startSearchStr $startSearchStr $sectionToReport;
$endSearchStr   $endSearchStr $sectionToReport;

if ( !
$inputFile ) { $inputFile ="$baseName$month$year$day.$siteConfig.txt" };

open (IN$inputFile) || die "cannot open $inputFilen";

# If there's a parameter for the output, open it here
if ($outputFile ne '') {
  
open (OUT,">$outputFile") || die "cannot create $outputFilen";
  
flock (OUT2);
}
# Loop through the input file searching for the start string. When
# found, start displaying the input lines (with spaces changed
# to commas) until the end tag is found.

# Array to store comments for printing once we hit the desired section
my $commentCount = -1;
my %commentArray;

while (<
IN>) {
  
chomp;

  if (/^
#s(.*-)s/){    # search for comment lines
    
s/ - /,/g;   # replace dashes with commas
    
s/#//;       # get rid of the comment sign
    
$commentArray[++$commentCount] = $_;
  }

  
# put the test to end printing here to eliminate printing
  # the line with the END tag
  
if (/^$endSearchStrb/) {
    
$startPrinting 0;
  }

  if (
$startPrinting) {
    
s/ /,/g;
    print 
"$_n";
    if (
$outputFile ne '') {
      print 
OUT "$_n";
    }
  }
  
# if we find an END tag and we haven't started printing, reset the
  # comment array to start re-capturing comments for next section
  
if ((/^END_/) && ($startPrinting == 0)) {
    
$commentCount = -1;
  }

  
# put the start printing test after the first input line
  # to eliminate printing the line with the BEGIN tag...find it
  # here, then start printing on the next input line
  
if (/^$startSearchStrb/) {
    
$startPrinting 1;
    
# print the comment array - it provides labels for the columns
    
for ($i 0$i <= $commentCount$i++ ) {
    print 
"$commentArray[$i]n";
    }
  }
}

close(IN);

# Close the output file if there was one used
if ($outputFile ne '') {
  
close(OUT);
}
?>
Онлайн: 0
Реклама