zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP, Dateien auswerten und Zeit?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 06.10.2009, 11:12
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Ich hab' mir mal schnell ein kleines Script geschrieben um's zu testen:

PHP-Code:
<?php

$time 
microtime(true);

$file '../logs/access.log';

$mozilla 0;

if ( (
$fp fopen($file'r')) !== false) {
    while (!
feof($fp)) {
        
$line fgets($fp);
        
        if (
preg_match('/\"[^\"]*Mozilla[^\"]*\"$/is'$line)) {
            
$mozilla++;
        }
    }
    
fclose($fp);
}

echo 
"Mozilla: "$mozilla"<br />\n";

$time microtime(true) - $time;

echo 
number_format($time5',''.'), " Sekunden<br />\n";

?>
Bei mir braucht er bei einer 7,5 MB Logdatei (ca. 35000 Zeilen) 0,3 - 0,5 Sekunden, also grob mal 6 oder 7 und ich lande bei Deinen 2 (bzw. 3) Sekunden.
Allerdings muss ich dazu sagen, dass ich das script in einer VM habe laufen lassen und diese sind ja bekannt dafür, dass sie eine schlecht IO-Performance haben, auf einem realen System sollte es schneller (deutlich) schneller sein.

Mit diesem Script brauche ich ca. 0,5 - 0,6 Sekunden, wobei der erste Zugriff deutlich langsamer war, ca. 2 Sekunden. Ich schätze danach war die Datei im Cache, möchte es aber dennoch nicht vorenthalten.

PHP-Code:
<?php

$time 
microtime(true);

$file '../logs/access.log';

$mozilla 0;

$lines file($file);

foreach (
$lines as $line) {
    if (
preg_match('/\"[^\"]*Mozilla[^\"]*\"$/is'$line)) {
        
$mozilla++;
    }
}

echo 
"Mozilla: "$mozilla"<br />\n";

$time microtime(true) - $time;

echo 
number_format($time5',''.'), " Sekunden<br />\n";

?>
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 06.10.2009, 11:23
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

"Mozilla" ist so ziemlich alles, sogar der IE meldet sich so
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 06.10.2009, 11:26
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

War doch nur ein Test.
Mit Zitat antworten
  #14 (permalink)  
Alt 06.10.2009, 13:33
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard

Zitat:
Zitat von mantiz Beitrag anzeigen
War doch nur ein Test.
Im Augenblick läuft das so:

Einlesen der Log-Datei mit kompletter Zeile ins Array, danach kommt ein Vorsortieren mit

Code:
sort($accesslog);
Nach dem Sortieren (ca. 2 Sekunden bei 240.000 Zeilen) folgt die eigentliche Auswertung:

Code:
   <?php 
     
      for ($i=0; $i < count ( $accesslog ); $i++) 
      {
      
        $checkip = explode(" ", $accesslog[$i]);
        $ip = $checkip[0];
        $browserstring = explode('"', $accesslog[$i]);

        // 
        // Check out all browser I know
        //

        if (preg_match("/amaya\//", $browserstring[5]))   
        {                                                 
          if ($lastip == $ip)
          {
             // do nothing
          }
          else
          {
            $lastip = $ip;
            $amaya++;
            $browserfound++;
          }
        }
        elseif (preg_match("/Namoroka\//", $browserstring[5])) 
        {
          if ($lastip == $ip)
          {
             // do nothing
          }
          else
          {
            $lastip = $ip;
            $namoroka++;      
            $browserfound++;
          }
        } 
        
        //
        //  und 70 weitere Browser...
        //
         
        $checkcount++;
      }

      echo $checkcount." Datensätze wurde zur Analyse verwendet<br />";

   ?>
Bei einer Datei mit 7MB (32.000 Zeilen) sind es schlappe 6-9 Sekunden und bei einer Datei mit 56MB (240.000 Zeilen) dauert es halt seine Zeit.
__________________
Personal stuff
Mit Zitat antworten
  #15 (permalink)  
Alt 06.10.2009, 18:29
Benutzerbild von Pr0g
(^.^)
XHTMLforum-Mitglied
 
Registriert seit: 23.08.2005
Ort: Düsseldorf
Beiträge: 535
Pr0g wird schon bald berühmt werden
Standard

Warum sortierst du das Array?
__________________
Mit Zitat antworten
  #16 (permalink)  
Alt 06.10.2009, 19:08
Benutzerbild von laborix
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 11.12.2005
Beiträge: 1.494
laborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Menschlaborix ist ein sehr geschätzer Mensch
Standard

Zitat:
Zitat von Pr0g Beitrag anzeigen
Warum sortierst du das Array?
Bei meiner Webseite ist es so, dass oft viele Besucher eine Aufenthaltsdauer von mehreren Minuten haben. Also sind in dieser Zeitspanne mehrere IP Adressen durcheinander vorhanden. Um den Browser zu zählen, müsste ich also die IP in ein Array packen und bei der nächsten Abfrage dieses Array wiederrum selbst durchlaufen.

Ich habe am Anfang mit mehreren Arrays gearbeitet und Zeitspannen weit über 1 Minute gehabt. Auch habe ich sehr unterschiedliche Werte, ob ich sortiere oder nicht.

Beispiel:

- 10.000 Treffer mit Sortieren
- 10.500 Treffer ohne Sortieren

Mache ich bei einem sortierten Array die Gegenprüfung (anderes Script zum Debugging) komme ich auf die Werte meiner Browser Auswertung plus/minus 50 Stück (was mir in diesem Fall egal ist und ich als Ok ansehe).
__________________
Personal stuff
Mit Zitat antworten
  #17 (permalink)  
Alt 07.10.2009, 23:18
Neuer Benutzer
neuer user
 
Registriert seit: 18.08.2009
Beiträge: 15
phpspace befindet sich auf einem aufstrebenden Ast
Standard

Wenn du nur nach ein bestimmten Wort suchen möchtest, kann ich dir empfehlen strstr (). Dies ist bedeutend schneller als preg_match() und steht auch als Anmerkung bei preg_match() in der Dokumentation von php.net

Bloß ob dies wirklich der Fall ist müsste man im einzelnen genau testen.
__________________
Brauchst Du Hilfe mit PHP?
Mit Zitat antworten
  #18 (permalink)  
Alt 07.10.2009, 23:42
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Zitat:
Zitat von phpspace Beitrag anzeigen
Wenn du nur nach ein bestimmten Wort suchen möchtest, kann ich dir empfehlen strstr ().
Auch strstr ist zu viel des Guten, da noch die Restzeichenkette erzeugt werden muss. strpos ist hier bedeutend besser geeignet.
__________________
Markus Wulftange
Mit Zitat antworten
  #19 (permalink)  
Alt 07.01.2010, 01:11
Neuer Benutzer
neuer user
 
Registriert seit: 18.08.2009
Beiträge: 15
phpspace befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gumbo Beitrag anzeigen
Auch strstr ist zu viel des Guten, da noch die Restzeichenkette erzeugt werden muss. strpos ist hier bedeutend besser geeignet.
Da muss ich dir eindeutig Recht geben, letzte Woche hatte ich zu dieser Funktion ein kleines Tutorial geschrieben. Für die Leute die sich gern dieses Tutorial ansehen möchten, können dies unter der Adresse: Php strpos() - Das vorkommen eines Zeichens in einer Zeichenkette ab einer bestimmten Position suchen machen.
__________________
Brauchst Du Hilfe mit PHP?
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php date gibt falsche Zeit aus? sepp88 Serveradministration und serverseitige Scripte 4 30.04.2011 10:07
Dateien mit PHP umbenennen Mr. Tool Serveradministration und serverseitige Scripte 3 03.11.2010 16:33
php Seiten online stellen online Serveradministration und serverseitige Scripte 7 27.03.2009 13:13
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
.htm dateien mit PHP ViktorR Serveradministration und serverseitige Scripte 2 23.12.2006 20:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:30 Uhr.