access log problem ---> 1GB in 10 Minuten

daflowjoe

Mitglied
Hallo Leute, ich hoffe ihr könnt mir helfen!

Ich benutze folgenden Code um eine Xml Datei für eine Statistik zu generieren.. Dabei sind einige Variablen undefined und führen dazu dass die log jeweils eine Fehlermeldung ausgibt.

Da dies bei jeder einzelner Stunde geschieht führt das zu Unmengen an Zeilen.

Was kann ich tun?

Vielen Dank schonmal im Vorraus.

gruss joe

Code:
<? function select($query) 
     { 
          $arrFetchedData = array(); 
          $result = mysql_query($query); 
          if($result != false) 
          { 
               
             	 $arrFetchedData = array(); 
               while($row = mysql_fetch_assoc($result)) 
               { 
                    $arrFetchedData[] = $row; 
               } 
               mysql_free_result($result); 
          } 
          return $arrFetchedData; 
     }
  
    function format($wert)
    {
    		switch ($wert)
    		{
    				case 01: 
    				$monat = 1;
    				break;
    				
    				case 02: 
    				$monat = 2;
    				break;
    				
    				case 03: 
    				$monat = 3;
    				break;
    				
    				case 04: 
    				$monat = 4;
    				break;
    				
    				case 05: 
    				$monat = 5;
    				break;
    				
    				case 06: 
    				$monat = 6;
    				break;
    				
    				case 07: 
    				$monat = 7;
    				break;
    				
    				case 08: 
    				$monat = 8;
    				break;
    				
    				case 09: 
    				$monat = 9;
    				break;
    				
    				default:
    				$monat = $monat;
    				break;
    				
    				
    			
    		}
    		return $monat;
    }
    
     function unformat($wert)
   	 {
    		switch ($wert)
    		{
    				case 1: 
    				$monat = "01";
    				break;
    				
    				case 2: 
    				$monat = "02";
    				break;
    				
    				case 3: 
    				$monat = "03";
    				break;
    				
    				case 4: 
    				$monat = "04";
    				break;
    				
    				case 5: 
    				$monat = "05";
    				break;
    				
    				case 6: 
    				$monat = "06";
    				break;
    				
    				case 7: 
    				$monat = "07";
    				break;
    				
    				case 8: 
    				$monat = "08";
    				break;
    				
    				case 9: 
    				$monat = "09";
    				break;
	   		}
    		return $monat;
  	  }
    
    function getYear($jahr)
    {
    	switch ($jahr)
    	{
    		case 1:
    		$name = "bla";
    		break;
    	}
    	return $name;
    }
    
    
    function getMonth($monat)
    {
    	switch ($monat)
    	{
    		case 1:
    		$name = "Januar";
    		break;
    		
    		case 2:
    		$name = "Februar";
    		break;
    		
    		case 3:
    		$name = "März";
    		break;
    		
    		case 4:
    		$name = "April";
    		break;
    		
    		case 5:
    		$name = "Mai";
    		break;
    		
    		case 6:
    		$name = "Juni";
    		break;
    		
    		case 7:
    		$name = "Juli";
    		break;
    		
    		case 8:
    		$name = "August";
    		break;
    		
    		case 9:
    		$name = "Sebtember";
    		break;
    		
    		case 10:
    		$name = "Oktober";
    		break;
    		
    		case 11:
    		$name = "November";
    		break;
    		
    		case 12:
    		$name = "Dezember";
    		break;
    	}
    	
    	return $name;
    }
    
    
    function getMonthdays($monat, $jahr)
    {
    	
    	
  if($jahr % 400 == 0) {$schaltjahr = 1;} 
  elseif ($jahr % 4 == 0 && $jahr % 100 != 0) {$schaltjahr = 1;}
  else {$schaltjahr = 0; }

    		switch ($monat)
    		{
    			case 1:
    			$tage = 31;
    			break;
    			
    			case 2:
    			$tage = 28+$schaltjahr;
    			break;
    			
    			case 3:
    			$tage = 31;
    			break;
    			
    			case 4:
    			$tage = 30;
    			break;
    			
    			case 5:
    			$tage = 31;
    			break;
    			
    			case 6:
    			$tage = 30;
    			break;
    			
    			case 7:
    			$tage = 31;
    			break;
    			
    			case 8:
    			$tage = 31;
    			break;
    			
    			case 9:
    			$tage = 30;
    			break;
    			
    			case 10:
    			$tage = 31;
    			break;
    			
    			case 11:
    			$tage = 30;
    			break;
    			
    			case 12:
    			$tage = 31;
    			break;
    			
    		}
    		return $tage;
    }
    
    function getDay($idatum) 
    {
        $temp = split("-", $idatum);
        $datum = mktime(0, 0, 0, $temp[1], $temp[0], $temp[2]);
        // Wochentage
        $wochentag=array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
        return $idatum . ' ' . $wochentag[date("w", $datum)];
    }
?>


Code:
<?
include 'functions.php';
mysql_connect("localhost", "simon", "simon") or die("Es konnte keine Verbindung aufgebaut werden");
mysql_select_db("simon");
$handle = fopen("test1.xml", "w++");

//$query = "select count(*) as Jahre, REPLACE(tag, "/", ".") as datum, substr(tag,8,4)as jahr, substr(tag,1,2)as tag, CASE substr(tag,4,3) When 'Jan' Then '01'  When 'Feb' Then '02' When 'Mar' Then '03' When 'Apr' Then '04' When 'May' Then '05' When 'Jun' Then '06' When 'Jul' Then '07' When 'Aug' Then '08' When 'Seb' Then '09' When 'Oct' Then '10' When 'Nov' Then '11' When 'Dec' Then '12' End as monat, stunde, anzahl from (select tag, stunde, ip, count(stunde) as anzahl from (select  substr(zeitpunkt,2,11) as tag, substr(zeitpunkt,14,2)as stunde, ip FROM access_log group by ip ORDER By tag) as tab32 group by tag, stunde order by tag) as tabl order by tag, stunde";
$querydata = 'select REPLACE(tag, "/", ".") as datum, substr(tag,8,4)as jahr, substr(tag,1,2)as tag, CASE substr(tag,4,3) When \'Jan\' Then \'01\'  When \'Feb\' Then \'02\' When \'Mar\' Then \'03\' When \'Apr\' Then \'04\' When \'May\' Then \'05\' When \'Jun\' Then \'06\' When \'Jul\' Then \'07\' When \'Aug\' Then \'08\' When \'Seb\' Then \'09\' When \'Oct\' Then \'10\' When \'Nov\' Then \'11\' When \'Dec\' Then \'12\' End as monat, stunde, anzahl from (select tag, stunde, ip, count(stunde) as anzahl from (select  substr(zeitpunkt,2,11) as tag, substr(zeitpunkt,14,2)as stunde, ip FROM access_log group by ip ORDER By tag) as tab32 group by tag, stunde order by tag) as tabl order by tag, stunde';
$execute_f = select($querydata);

foreach($execute_f as $querykey)
{

	$arr_db[$querykey['jahr'].$querykey['monat'].$querykey['tag'].$querykey['stunde']] = $querykey['anzahl']; 
}

$queryYears = 'select count(*) as jahre from(select REPLACE(tag, "/", ".") as datum, substr(tag,8,4)as jahr, substr(tag,1,2)as tag, CASE substr(tag,4,3) When \'Jan\' Then \'01\'  When \'Feb\' Then \'02\' When \'Mar\' Then \'03\' When \'Apr\' Then \'04\' When \'May\' Then \'05\' When \'Jun\' Then \'06\' When \'Jul\' Then \'07\' When \'Aug\' Then \'08\' When \'Seb\' Then \'09\' When \'Oct\' Then \'10\' When \'Nov\' Then \'11\' When \'Dec\' Then \'12\' End as monat, stunde, anzahl from (select tag, stunde, ip, count(stunde) as anzahl from (select  substr(zeitpunkt,2,11) as tag, substr(zeitpunkt,14,2)as stunde, ip FROM access_log group by ip ORDER By tag) as tab32 group by tag, stunde order by tag) as tabl group by jahr order by tag, stunde)as donno';
$years = select($queryYears);
foreach($years as $years_nr)
{
		$jahre = $years_nr['jahre'];
}

$queryFirstyear = 'select REPLACE(tag, "/", ".") as datum, substr(tag,8,4)as jahr, substr(tag,1,2)as tag, CASE substr(tag,4,3) When \'Jan\' Then \'01\'  When \'Feb\' Then \'02\' When \'Mar\' Then \'03\' When \'Apr\' Then \'04\' When \'May\' Then \'05\' When \'Jun\' Then \'06\' When \'Jul\' Then \'07\' When \'Aug\' Then \'08\' When \'Seb\' Then \'09\' When \'Oct\' Then \'10\' When \'Nov\' Then \'11\' When \'Dec\' Then \'12\' End as monat, stunde, anzahl from (select tag, stunde, ip, count(stunde) as anzahl from (select  substr(zeitpunkt,2,11) as tag, substr(zeitpunkt,14,2)as stunde, ip FROM access_log group by ip ORDER By tag) as tab32 group by tag, stunde order by tag) as tabl group by jahr order by jahr limit 1';
$firstYear = select($queryFirstyear);
foreach($firstYear as $arrFirstYear)
{
		$startjahr = $arrFirstYear['jahr'];
}


$content = '<statistik>';
fwrite($handle, $content);

$endjahr = $startjahr + $jahre;

for ($jahr = $startjahr ; $jahr <= $endjahr; $jahr++) //Anzahl der vorhanden jahre ermitteln //Anzahl der vorhanden jahre ermitteln //Anzahl der vorhanden jahre ermitteln //Anzahl der vorhanden jahre ermitteln //Anzahl der vorhanden jahre ermitteln
{
		$content = '<jahr jahr="'.$jahr.'" name="'.$name.'">';
		fwrite($handle, $content);
		
		for($monat = 1; $monat <= 12; $monat++)
		{
				$name = getMonth($monat);
				$content = '<monat monat="'.$monat.'" name="'.$name.'">';
				fwrite($handle, $content);
						$monatstage = getMonthdays($monat, $jahr);
						for($tag = 1; $tag <= $monatstage; $tag++)
						{
							$tag = unformat($tag);
							$monat = unformat($monat);
							$datum = $tag.'-'.$monat.'-'.$jahr;
							$name = getDay($datum);
							$datum = $tag.'.'.$monat.'.'.$jahr;
							$content = '<tag tag="'.$tag.'" name="'.$name.'" datum="'.$datum.'">';
							fwrite($handle, $content);
							
							for($stunde = 1; $stunde <= 24; $stunde++)
							{
									if($arr_db[$jahr.$monat.$tag.$stunde] == ""){$arr_db[$jahr.$monat.$tag.$stunde]= 0;}
									$zugriffe = $arr_db[$jahr.$monat.$tag.$stunde];
									$content = '<stunde stunde="'.$stunde.'" zugriffe="'.$zugriffe.'" />';
									fwrite($handle, $content);
							}
							$content = '</tag>';
							fwrite($handle, $content);
						}
				$content = '</monat>';
				fwrite($handle, $content);
		}			
		$content = '</jahr>';
		fwrite($handle, $content);
}

$content = '</statistik>';
fwrite($handle, $content);
    fclose($handle);
    print 'test';
?>
 
Dabei sind einige Variablen undefined und führen dazu dass die log jeweils eine Fehlermeldung ausgibt.

Da dies bei jeder einzelner Stunde geschieht führt das zu Unmengen an Zeilen.

Was kann ich tun?
Ganz einfach: Verarbeite keine nicht deklarierten Variablen. Um sowas zu vermeiden gibt es z.B. isset(). Damit kannst Du pruefen ob eine Variable deklariert ist und diese eben nur dann auch verarbeiten.
 
Zurück