Daniel: Platzhalter

Hi,
ich suche einen platzhalter für php, ich möchte nähmlich alle dateien
mit einem bestimmten anfang, z.B. "peter" und einer bestimmten endung,
z.B. ".data" in ein unterverzeichniss kopieren. als z.B.
fopen("peter*.data");
grund. bei einer löschung von "peter" sollen seine daten für einen
gewissen zeitraum gespeichert werden um eine evtl. wiederherstellung zu
ermöglichen. Aber wie bekomme ich das hin? ich steh grad total auf dem
schlauch.

MfG

  1. Seitwann beschäftigst du dich mit PHP?
    Jedenfalls wird man aus deiner Frage ned ganz schlau :-)

    WeinSchweinerich

    1. Hi WeinSchweinerich,

      Jedenfalls wird man aus deiner Frage ned ganz schlau :-)

      Die Frage war doch eingentlich klar, er hat z.B. folgende Dateien in einem Verzeichnis:

      • peter_blabla.data
      • peter_nochwas.data
      • dennis_blablubb.data
      • dennis_nochwas.data

      Und jetzt möchte er alle Dateien, die mit peter beginnen und mit .data enden kopieren.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
  2. Hi Daniel,

    ich suche einen platzhalter für php, ich möchte nähmlich alle dateien
    mit einem bestimmten anfang, z.B. "peter" und einer bestimmten endung,
    z.B. ".data" in ein unterverzeichniss kopieren.

    Dazu müsstest zuerst das ganze Verzeichnis einlesen, dazu benötigst du die Funktionen opendir, readdir und closedir - alternativ kannst du direkt die Funktion dir2array aus meiner dir_funcions Library nehmen.

      
    //Library includen  
    include "dir_functions-0.2_beta.lib.php";  
      
    //Verzeichnis einlesen  
    $files = dir2array("mydir");  
      
    //Zur Kontrolle Array ausgeben.  
    echo "<pre>";  
    print_r($files);  
    echo "</pre>";
    

    Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.
    1. Hi,

      Dazu müsstest zuerst das ganze Verzeichnis einlesen, dazu benötigst du die Funktionen opendir, readdir und closedir

      Verzeichniss einlesen ist OK, die funktionen kenn ich daher kein problem.

      • alternativ kannst du direkt die Funktion dir2array aus meiner dir_funcions Library nehmen.

      werd ich mir ankucken

      //Library includen
      include "dir_functions-0.2_beta.lib.php";

      sollte wohl include ("dir_functions-0.2_beta.lib.php"); heißen.

      //Verzeichnis einlesen
      $files = dir2array("mydir");

      mydir = das verzeichniss in dem die wie in meinem bsp die .data datein liegen.

      //Zur Kontrolle Array ausgeben.
      echo "<pre>";
      print_r($files);
      echo "</pre>";[/code]

      Kontrolle? ich bin selbstbewusster Programmierer und vertraue auf die macht von php.

      Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.

      ereg? preg_match? nie gehört. aber die Idee das verzeichniss in ein
      array auszulesen und dann dort die strings zu prüfen ist eine geniale
      Idee. So werd ich es wohl machen. außer es kommt noch ein "besserer"
      Vorschlag was ich aber bezweifele.

      Vielen Dank Dennis

      MfG (an alle außer Mr Prams)

      1. Hi Daniel,

        //Library includen
        include "dir_functions-0.2_beta.lib.php";

        sollte wohl include ("dir_functions-0.2_beta.lib.php"); heißen.

        Nein, nicht nötig - AFAIK ist include genau wie echo ein Sprachkonstrukt, du kannst ja auch echo ("Text"); schreiben, oder einfach bei echo "Text"; bleiben.

        //Verzeichnis einlesen
        $files = dir2array("mydir");

        mydir = das verzeichniss in dem die wie in meinem bsp die .data datein liegen.

        Richtig, könnte natürlich auch ../path/to/mydir sein.

        //Zur Kontrolle Array ausgeben.
        echo "<pre>";
        print_r($files);
        echo "</pre>";[/code]

        Kontrolle? ich bin selbstbewusster Programmierer und vertraue auf die macht von php.

        PHP kann sich aber schlecht selber programmieren - und es ist _deine_ Aufgabe als Programmierer auch auf _deine_ Fehler zu stoßen, würde beispielsweise beim Einlesen der Daten etwas schieflaufen, würdest du es hier sehen.

        Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.

        ereg? preg_match? nie gehört. aber die Idee das verzeichniss in ein
        array auszulesen und dann dort die strings zu prüfen ist eine geniale
        Idee.

        Schau doch einfach im Manual nach: ereg_replace() und preg_replace().

        Sämtliche preg_* Funktionen arbeiten nach PCRE - du kannst dort also reguläre Ausdrücke anweden nach PCRE Standard, deshalb solltest du dir dazu, wenn du die Funktionen mal brauchen solltest auch die Pattern Syntax und Modifiers zu Gemüte führen. Ein gutes deutsches Tutorial, was dich (in einem Abschnitt) in dieses Thema einführt ist http://tut.php-q.net/regex.html.

        So werd ich es wohl machen. außer es kommt noch ein "besserer"
        Vorschlag was ich aber bezweifele.

        Mir ist keine fertige Funktion für dein Vorhaben bekannt.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
        1. Hi Daniel,

          Schau doch einfach im Manual nach: ereg_replace() und preg_replace().

          Sorry, bin jetzt durcheinander gekommen, mit einem anderen Posting hier im Forum - du brauchst natürlich nicht die *_replace Funktionen, da du ja nichts ersetzen willst.

          Für dich reicht: ereg() bzw. preg_match.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
          1. Hi,

            Sorry, bin jetzt durcheinander gekommen, mit einem anderen Posting hier im Forum

            macht doch nix. ich habs jetzt so "gelöst":

              
            $verzeichniss = opendir("./");  
            while($inhalt = readdir($verzeichniss))  
            {  
             $string = $inhalt;  
             if(strpos($string, $dateianfang) === false)  
             {  
              //nicht eine datei mit gesuchtem anfang  
             }  
             else  
             {  
              echo $string." -> treffer<br>";  
             }  
            }  
            closedir($verzeichniss);  
            
            

            jetzt brauch ich ja nurnoch
            echo $string." -> treffer<br>";
            durch fopen($datei, "r") etc. ersetzten und die sache funktioniert, nichtwar?

            MfG

            1. Hi Daniel,

              while($inhalt = readdir($verzeichniss))

                
              Wie du auch meiner Funktion entnehmen kannst, solltest du hier es lieber so schreiben:  
                
              `while(($inhalt = readdir($verzeichniss)) !== FALSE)`{:.language-php}  
                
              Denn, rein theoretisch könnte ja auch eine Datei mit dem Namen "0" dabei sein, dabei würde deine Schleife oben "bei draufgehen".  
                
                
              
              > ~~~php
              
               $string = $inhalt;  
              
              >  if(strpos($string, $dateianfang) === false)  
              >  {  
              >   //nicht eine datei mit gesuchtem anfang  
              >  }
              
              

              Dir ist aber schon bewusst, dass du hier jetzt nur den Datei Anfang prüfst? In deinem Ausgangsposting wolltest du ja Dateinamen-Anfang und -Ende überprüfen...

              jetzt brauch ich ja nurnoch
              echo $string." -> treffer<br>";
              durch fopen($datei, "r") etc. ersetzten und die sache funktioniert, nichtwar?

              Was willst du mit fopen()? Die Datei einlesen und den Inhalt wieder in eine neue Datei schreiben? Nein, das ist doch viel zu umständlich - PHP kennt bereits eine fertige Funktion zum verschieben von Dateien: rename(). Damit kannst du z.B. eine Datei "bla.txt" in "ordner/bla.txt" „umbenennen” - in diesem Fall hier also auch verschieben. Wenn du die Datei nur kopieren möchtest, verwende copy().

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
              Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker gehören und nicht hier her?
            2. Hi,

              if(strpos($string, $dateianfang) === false)
                  //nicht eine datei mit gesuchtem anfang
              else
                  echo $string." -> treffer<br>";

              Achtung! Stell Dir vor, Du hast zwei User namens "Andrea" und "Andreas".
              Und jetzt sollen die Daten für "Andrea" gelöscht werden ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. hi,

      Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden

      fnmatch() könnte sich dafür auch als recht angenehm herausstellen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }