php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-07-2008, 12:39
lars-th
 Newbie
Links : Onlinestatus : lars-th ist offline
Registriert seit: Jul 2008
Beiträge: 2
lars-th ist zur Zeit noch ein unbeschriebenes Blatt
Standard Hirnknoten für Auswertung

Hallo zusammen,

ich habe ein kleines Problem beim schreiben eines Skriptes, wobei mir der Denkansatz fehlt und weniger das technische dazu... Vielleicht könnt Ihr mir helfen, bin sehr dankbar für jede Idee.

Das Problem stellt sich wie folgt da:

Ich habe eine CSV mit ca. 20000 Zeilen, in denen die Angaben Uhrzeit, Modul Nummer, Start/Ende und der Benutzer drin steht. Das ist eine Logfile aus unserer WaWi, die aufzeichnet welcher Nutzer welches Modul startet. Ich muss jetzt irgendwie auswerten, wieviele Nutzer GLEICHZEITIG in den einzelnen Modulen waren, um für unser neues ERP die Lizenzberechnung durchzuführen, da die leider Modulweise lizenzieren. Kleines Beispiel zum Verständnis: User A Start Modul K110 um 6:55, User B Start 7:02 und User C 8:30. User A Ende Modul K110 aber schon 8:10, bedeutet das ich maximal 2 gleichzeitige Nutzer hatte.
Mir fehlt irgendwo der Denkansatz um diese einzelnen Einträge zu differenzieren.

Besten Dank im voraus für jeden Tipp.
Gruß,

Lars

Geändert von lars-th (18-07-2008 um 12:42 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-07-2008, 13:46
case
 Registrierter Benutzer
Links : Onlinestatus : case ist offline
Registriert seit: Mar 2007
Beiträge: 265
case ist zur Zeit noch ein unbeschriebenes Blatt
case eine Nachricht über ICQ schicken
Standard

Das ist allerdings ein guter Hirnknoten....

also auf die Schnelle fällt mir da nur folgene (halbwegs) Vernünftige Lösung ein:

Du ließt alle Daten aus der CSV-Datei aus und speicherst alles in eine (temporäre) SQL-Tabelle.

Dann gehst du alle Datensätze durch und überprüfst bei jedem Start, wie viele zu diesem Zeitpunkt denn zu diesem Zeitpunkt in diesem Modul waren. Ist dieser Wert größer dem, den du schon vorher als größten Wert ermittelt hast, so speicherst du diesen Wert.

Und dann halt immer so weiter......

Zum schluss hast du dann für jedes Modul den höchsten Wert.
__________________
signed oder unsigned... das ist hier die Frage
Mit Zitat antworten
  #3 (permalink)  
Alt 18-07-2008, 13:46
dani_o
 PHP Senior
Links : Onlinestatus : dani_o ist offline
Registriert seit: Jun 2003
Ort: Lichtenstein/Sa.
Beiträge: 1.599
dani_o befindet sich auf einem aufstrebenden Ast
Standard

in ein array lesen

- name
- von
- bis

dann vergleichen und du hast ein ergebnis
__________________
Signatur-Text ...
Mit Zitat antworten
  #4 (permalink)  
Alt 18-07-2008, 14:41
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Naja, "mal eben so" ist das sicher nicht gemacht, aber wenn du ein wenig nachdenkst, kommst du ganz fix auf eine Lösung. Ganz primitiv könntest du zum Beispiel ein Array aufbauen, welches als Schlüssel den Zeitwert einer Minute enthält. Nun gehst du deine Daten durch und trägst jeden Benutzer in den aktiven Minuten ein. Dann das Array durch gehen und du hast die maximal gleichzeitig aktiven User.
Das wird bei 20000 Zeilen natürlich viel zu Speicheraufwendig, aber so als Denkansatz für's vorgehen.
Mit Zitat antworten
  #5 (permalink)  
Alt 18-07-2008, 19:53
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Mal angenommen, eine Zeile des Logfiles ist durchschnittlich 4096 Bytes. Dann ist das ganze Logfile ca. 80 MB. Der Standardwert für memoy_limit ist 128 MB, da ist also noch gut Luft.

Zur Not könntest du das Logfile erstmal nach Modul sortieren. Das geht mit wenig Speicher (Bubblesort). Danach kannst du das File portionsweise verarbeiten, Modul für Modul. Das hat natürlich keinen Zweck, wenn 99% der Logeinträge zum selben Modul sind.

Um es weiterzuspinnen: Nach dem Sortieren nach Modul kannst du noch ein zweites Mal durchgehen und jeden Modulabschnitt nach Loginzeit sortieren. Das geht selbstverständlich auch mit minimalem Speicherverbrauch - analog zur Modulsortierung.

Wenn Speicher kein Problem ist, würde ich das selbe machen, Sortieren nach Modul und Loginzeit, aber halt per file() und usort().

Im Rest dieses Beitrags gehe ich davon aus, dass die Logeinträge modulweise verarbeitet werden. Erst alle Einträge zu Modul a, dann alle zu Modul b und so weiter.

Iteriere über die Einträge und halte dabei zwei Werte, $user und $max_user.
Bei jedem Login wird $user um eins erhöht, bei Logout um 1 verringert. In jeder Iteration wird $max_user auf $user gesetzt, wenn $user größer als $max_user ist. Etwa so:
PHP-Code:
$user 0;
$max_user 0;
foreach (
$lines as $l) {
    if (
isLogin($l)) $user++;
    elseif (
isLogout($l) && $user 0$user--;
    if (
$user $max_user$max_user $user;

Mit Zitat antworten
  #6 (permalink)  
Alt 28-07-2008, 08:28
lars-th
 Newbie
Links : Onlinestatus : lars-th ist offline
Registriert seit: Jul 2008
Beiträge: 2
lars-th ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Tschuldigung wenn ich das Thema jetzt pushe, aber wollte mich für die Hilfe bedanken, hat dann super geklappt
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:20 Uhr.