Portal > Foren > PHP > PHP-Programmierung > Cache leeren um mit file Dateien zu durchsuchen
Antwort
 
Themen-Optionen
Alt 05.03.2007, 16:17 Nach oben    #1
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 30
Standard Cache leeren um mit file Dateien zu durchsuchen

Hallo,

ich hab ein kleines Problem. Ich möchte mit meiner Funktion den Inhalt aller Dateien aus einem Ordner durchsuchen. Nur beiinhaltet dieser Ordner wiederum ca. 10 000 Ordner, in denen die Dateien sind, gehen wir also von insgesamt 100 000 Dateien aus, ich durchsuche den Inhalt dieser Dateien nach einem String und möchte diesen Dateinamen ausgeben (inkl. Pfad).

Mein Problem bei der Sache, dass der Cache nach kurzer Zeit überlagert ist (kein Wunder, bei so einer Menge an Daten) und das Script abbricht.

Ist es möglich, wenn ja wie, das zu umgehen, bzw. den Cache immer wieder zu leeren, sodass der Arbeitsspeicher nicht voll ausgelastet wird und das Script abbricht?

Meinen Code seht ihr hier.

PHP-Code:
<?php

function lese_verzeichnisse($v_name$funk_name$max_tiefe 10$tiefe =0) {

    if (
$tiefe >= $max_tiefe) {
            
error_log("Maximale Tiefe $max_tiefe von $v_name.");
        return 
false;
    }
    
$sub_vers = array();
    
$files = array();
    if (
is_dir($v_name) && is_readable($v_name)) {
        
$verzeichnis dir($v_name);
        while (
false !== ($datei $verzeichnis->read())) {
            if ((
'.' == $datei) || ('..' == $datei) || ('select_all.php' == $datei)) {
                continue;
            }
            if (
is_dir("$v_name/$datei")) {
                
array_push($sub_vers,"$v_name/$datei");
            } else {
                
$funk_name("$v_name/$datei");
            }
        }
        
$verzeichnis->close();
        foreach (
$sub_vers as $sub_ver) {
            
lese_verzeichnisse($sub_ver,$funk_name,$max_tiefe,$tiefe+1);
        }
    }
}

function 
printatime($p_datei) {
        
$muster "/\bSTRING\b/i";
        
$filename ''.$p_datei.'';
        if (
file_exists($filename)) {
        
$content file($filename);
            foreach (
$content as $line) {
                if(
preg_match($muster$line)){
                print 
'<b>' $filename '</b>';
                }
            }
        }
}

lese_verzeichnisse('.','printatime');

?>
Danke euch.^^

MFG
Tryzero ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 16:22 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Die Frage ist doch eigentlich, wieso du das machen willst und ob es nicht eine günstigere Alternative gibt, oder?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 16:25 Nach oben    #3
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 30
Standard

Hehe,

naja warum.^^ Ich habe ein System (schon etwas älter) und damals alles etwas statisch aufgebaut, wenn ein User sich registriert hat, wurde in seine Datei ein Code geschrieben mit einer Variablen ID, meist sein Benutzername, nun muss der Code aber raus und derzeit gibt es 4000 Benutzer, jeder hat da wieder rum seine Dateien und Ordner drinnen, und ich kann es nicht schaffen, dass die User von selbst diesen Code entfernen. Ich habe ein Script geschrieben was in der Maindatei einen Code ohne Variable ID ersetzt (kein Thema) nur sind die anderen Codes in JEDER Datei eingebunden werden.^^ Nun muss ich herausfinden, welcher User noch in welcher Datei einen Code hat, und ich schätze das es noch ca. 600 sind. (Filtern geht nicht, da es nichts zum filtern gibt)

mfg^^
Tryzero ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 17:20 Nach oben    #4
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 508
Standard

also eigentlich wird ja jedes durchsuchte verzeichnis geschlossen, bevor die unterverzeichnisse durchsucht werden ($verzeichnis->close()). die frage ist nur, warum die daten trotzdem noch den speicher blockieren...
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 17:41 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 825
Standard

clearstatcache()

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 17:55 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

Ich denke mir, dass die maximale Ausführungszeit für PHP-Scripte letztendlich das Ganze beschränken wird. Bei einen Testlauf bei meinen Verzeichnissen bekam ich nach 60 Sekunden den abbruch nach rund 4000 Dateien ....

Davon abgesehen würde ich die Funktion printatime weiter optimieren:

PHP-Code:
function printatime$p_datei) {
  
$muster "/\bSTRING\b/i";
  
$filename ''.$p_datei.'';
  if (
file_exists($filename)) {
    
$fh fopen$filename"r");
    while( ! 
feof$fh)) {
      
$line fgets$fh);
      if( 
preg_match$muster$line)) {
        print 
'<b>'.$filename.'</b><br>'."\n";
        break;
      }
    }
    
fclose$fh);
  }

Gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 18:00 Nach oben    #7
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 30
Standard

Danke euch, werde ich mal testen und ich sage euch bescheid, was es fürn Ergebnis gab.

Thx

mfg
Tryzero ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 18:09 Nach oben    #8
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 508
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
clearstatcache()
Das löscht aber nur den status cache (also in diesem fall eigentlich nur die werte für file_exists, is_readable und is_dir). und ich kann mir nicht vorstellen, dass allein diese daten den speicher vollpumpen...
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 19:20 Nach oben    #9
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 146
Standard

So, ich habe mal mit einem utopischen Zeit-Limit von 600 Sekunden getestet .... Ich weiß ja nicht, was für Dateien Du letztendlich hast, aber bei mir waren nach 27000 Dateien und 4650 Verzeichnissen Schluss mit Timeout.

Gruß,
Jumper, the II.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.03.2007, 19:59 Nach oben    #10
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 30
Standard

So,

hatte das Timeout auf 300 Sekunden hochgeschraubt und er hat 3/5 geschafft. Werds nochmal hochschrauben und dann glaub ich sollts funktionieren.

Bisher geht alles, nichts mehr mit Cache...

mfg
Tryzero ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2007, 06:08 Nach oben    #11
Neuer Benutzer
 
Registriert seit: 31.05.2006
Beiträge: 24
Standard

Da is aber sicher Refactoring angesagt ^^ Alles schön einlesen und ab in eine DB und gut ist
KingCrunch ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.03.2007, 20:33 Nach oben    #12
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 30
Standard

Hallo,

ich habe das jetzt ausgiebig geteste, es gibt auch noch eine andere möglichkeit, wenn man SSH Zugriff hat mit dem Befehl:

grep --directories=recurse suchtext * >speicherdatei.txt

damit durchsucht er wenn man das in dem jeweiligen pfad eingibt alle daten und schreibt die funde in die datei speicherdatei.txt.

MFG
Try
Tryzero ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.03.2007, 10:13 Nach oben    #13
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 825
Standard

...jo, manchmal sieht man vor lauter Bäumen den Wald nicht, was?

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Dateien aus .jar Files holen SoulReaper Allgemeine Java-Programmierung 8 30.06.2007 14:56
(PHP)Editor, der mehrere Dateien gleichzeitig durchsuchen kann Chr!s Gesuche 8 17.03.2006 19:55
Cache für Dateisystem-Abstraktion - wo Implementierung sinnvoll? pago Allgemeine Java-Programmierung 0 27.02.2006 11:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44