ereg Problem

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ereg Problem

    Benuter Code
    PHP-Code:
    ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+[0-9: ]* [0-9]{2}:?[0-9]{2}) (.+)"$rawlist[$i], $regs); 
    Ausgabe (kommentiert)
    PHP-Code:
    Array
    (
        [
    0] => dr-xrwxr-x   7 1005     staff        4096 Dec 21 15:29 Gute Zeiten
        
    [1] => d
        
    [2] => r-xrwxr-x
        
    [3] => 4096
        
    [4] => Dec 21 15:29                //so sollte es aussehen
        
    [5] => Gute Zeiten
        
    [6] => 
        [
    7] => 
        [
    8] => 
        [
    9] => 
    )

    Dies ist der OrdnerGute Zeiten
    2003
    -12-21        // wird aus dem oben genannten Datum erzeugt und ist hier nicht von Bedeutung

    dr-xrwxr-x   2 1005     staff        4096 Dec 21 15:28 1986 An Ordinary Life  //so sieht der String aus der mit ereg bearbeitet wird.
    Array
    (
        [
    0] => dr-xrwxr-x   2 1005     staff        4096 Dec 21 15:28 1986 Hang On  //1986 gehört zum Titel
        
    [1] => d
        
    [2] => r-xrwxr-x
        
    [3] => 4096
        
    [4] => Dec 21 15:28 1986        //1986 sollte nicht mehr dazugenommen werden
        
    [5] => - Hang On                //da es zum Titel gehört
        
    [6] => 
        [
    7] => 
        [
    8] => 
        [
    9] => 
    )

    //der Befehl ftp_cdup wird jetzt ausgeführt mit dem Ornder Hang On

    dr-xrwxr-x   2 1005     staff        4096 Dec 21 15:28 1986 Hang On
    Dies ist der Ordner
    : - Hang On
    2003
    -12-21

    Warning
    ftp_chdir: - Hang OnNo such file or directory in C:\apache\htdocs\neuftp\suchevonmir2.php on line 104 

  • #2
    ([a-zA-Z]+[0-9: ]* [0-9]{2}:?[0-9]{2})

    das ist der problematische Teil.
    und zwar genau das Leerzeichen im zweiten CharSet.

    Entweder in mehrere Gruppen unterteilen oder (einfacher) die Länge begrenzen:
    [0-9: ]* --> [0-9: ]{8}
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Juppi es hat doch noch jemand drauf geantwortet

      OK kleines Problem
      ich lass mir nach dem ereg Befehl die $regs ausgeben aber sobald ich des beschränke so wie du es meinst klappt die Ausgabe nicht mehr.
      PHP-Code:
      ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+[0-9: ]{8} [0-9]{2}:?[0-9]{2}) (.+)"$rawlist[$i], $regs);
      echo 
      "<pre>";
      print_r($regs);
      echo 
      "</pre>"
      Was ist da los? Das Array $regs existiert doch auch wenn ichs beschränke. Woran kann das liegen?

      Mfg Markus

      Kommentar


      • #4
        Entweder vor "[0-9: ]{8}" ein Leerzeichen einfügen
        oder die 8 durch eine 9 ersetzen, dann sollte es funzen.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Also habs jetzt ausgiebig getestet und auch noch andere Möglichkeiten getestet was allerdings zu keinem erfolgreichen Ergebnis geführt hat.

          ERGEBNIS:
          PHP-Code:
          drwxr-xr-x   1 ftp      ftp            0 Mar 09 15:23 1999 Ordner 3 gross
          Array
          (
              [
          0] => drwxr-xr-x   1 ftp      ftp            0 Mar 09 15:23 1999 Ordner 3 gross
              
          [1] => d
              
          [2] => rwxr-xr-x
              
          [3] => 0
              
          [4] => Mar 09 15:23 1999
              
          [5] => - Ordner 3 gross
              
          [6] => 
              [
          7] => 
              [
          8] => 
              [
          9] => 
          )

          Dies ist der Ordner Ordner 3 gross
          2003
          -03-09

          Warning
          ftp_chdirCWD failed'- Ordner 3 gross' no such file or directoryin C:\apache\htdocs\neuftp\serversuche.php on line 170

          Code
          :
          ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+ [0-9: ]* [0-9]{2}:?[0-9]{2}) (.+)"$rawlist[$i], $regs); 
          Ich gebe jetzt auf, HEUL......

          Danke für eure Hilfe
          Wer sich daran versuchen will oder vielleicht einen Lösungsansatz hat soll bitte posten.

          Mfg Markus

          Kommentar


          • #6
            Juppi, hab noch ne Seite gefunden, vielleicht klappt das ja, muss es mir aber erst noch genau anschauen.

            Code von http://www.inebria.com/phpftp/ftp.phps

            PHP-Code:
                    if ($contents ftp_rawlist($ftp,"")) {
                        
            $d_i=0;
                        
            $f_i=0;
                        
            $l_i=0;
                        
            $i=0;
                        while (
            $contents[$i]) {
                            
            $item[] = split("[ ]+",$contents[$i],9);
                            
            $item_type=substr($item[$i][0],0,1);
                            if (
            $item_type == "d") {
                                
            /* it's a directory */
                                
            $nlist_dirs[$d_i]=$item[$i][8];
                                
            $d_i++;
                            } elseif (
            $item_type == "l") {
                                
            /* it's a symlink */
                                
            $nlist_links[$l_i]=$item[$i][8];
                                
            $l_i++;
                            } elseif (
            $item_type == "-") {
                                
            /* it's a file */
                                
            $nlist_files[$f_i]=$item[$i][8];
                                
            $nlist_filesize[$f_i]=$item[$i][4];
                                
            $f_i++;
                            } elseif (
            $item_type == "+") {
                                
            /* it's something on an anonftp server */
                                
            $eplf=split(",",implode(" ",$item[$i]),5);
                                if (
            $eplf[2] == "r") {
                                    
            /* it's a file */
                                    
            $nlist_files[$f_i]=trim($eplf[4]);
                                    
            $nlist_filesize[$f_i]=substr($eplf[3],1);
                                    
            $f_i++;
                                } elseif (
            $eplf[2] == "/") {
                                    
            /* it's a directory */
                                    
            $nlist_dirs[$d_i]=trim($eplf[3]);
                                    
            $d_i++;
                                }
                            } 
            /* ignore all others */
                            
            $i++;
                        } 
            Wer mir helfen will des Ding zu analysieren kann sich gern betteiligen da ich die Hälfte der benutzen Funktionen nicht kenn.

            Mfg Markus

            Kommentar


            • #7
              Original geschrieben von markusschmitt
              [...] da ich die Hälfte der benutzen Funktionen nicht kenn.
              du nicht. aber das manual ....

              http://de.php.net/manual/de
              EDIT:
              oder hier: www.php-resource.de/manual.php
              Zuletzt geändert von Titus; 13.05.2003, 15:35.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Den spruch kenn ich schon nur zu genüge.

                Mir leuchtet der split Befehl nicht ganz ein
                von PHP.net
                PHP-Code:
                $datum "04/30/1973";  // Trennzeichen darf ein Schrägstrich, Punkt
                                        // oder Bindestrich sein
                list ($monat$tag$jahr) = split ('[/.-]'$datum);
                echo 
                "Monat: $monat; Tag: $tag; Jahr: $jahr<br>\n"
                Code den ich gepostet hab
                PHP-Code:
                $item[] = split("[ ]+",$contents[$i],9); 
                Jetzt kommt die Question
                $item[] = es wird ein Array angelegt
                split = ("[ ]+", = Suchmuster also entweder ein Leerzeichen oder keins
                $contents[$i] = ist der durchsuchende $i String
                9 = ?

                Was bedeutet die 9
                Wird hier ein Array angelegt mit mindestens 9 mit Leerzeichen getrennten Strings und alle Leerzeichen hinterher werden ignoriert und dem 9ten Arrayelement hinzugefügt?

                Werd nicht ganz schlau aus der Zahl, wer weiss Rat?

                Mfg Markus

                Kommentar


                • #9
                  Habs getestet und es passt.
                  zur vorherigen Frage hätte ich dann doch noch gerne ein erklärung?

                  PHP-Code:
                  //Testskript
                  <?php
                  $suche 
                  "drwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 gross";
                  $item split("[ ]+",$suche,9);
                  echo
                  "<pre>";
                  print_r($item);
                  echo
                  "</pre>";
                  ?>
                  Ergebnis:

                  PHP-Code:
                  Array
                  (
                      [
                  0] => drwxr-xr-x
                      
                  [1] => 1
                      
                  [2] => ftp
                      
                  [3] => ftp
                      
                  [4] => 0
                      
                  [5] => Mar
                      
                  [6] => 09
                      
                  [7] => 15:23
                      
                  [8] => 1999 Ordner 3 gross

                  Hoffe des klappt mit allen Dateien und Ordnern. Zum bestätigen müsste ich jetzt zur obigen Frage eine Antwort haben!

                  Mfg Markus

                  Kommentar


                  • #10
                    das '[ ]+' heisst, wenn ich mich nicht irre, dass immer dann getrennt wird, wenn mindestest ein leerzeichen enthalten ist.

                    diese aussage ist jedoch nicht mehr hier '1999 - Ordner 3 gross' anwendbar. was mich ein wenig wundert
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      des ist dir also
                      Ich habs jetzt mit mehreren Strings getestet und es funktioniert. Schreib gerade mein Funktion um.
                      Das Ergebnis sind bisher immer 9 Array elemente mit perfektem Inhalt. Was die 9 hinten bedeutet weist du auch nicht oder?

                      Mfg Markus

                      Kommentar


                      • #12
                        Original geschrieben von markusschmitt
                        Was die 9 hinten bedeutet weist du auch nicht oder?
                        das ist ja wohl noch das einfachste
                        Code:
                        drwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 gross
                        ist aufgeteilt dieses hier...
                        Code:
                        Array
                        (
                            [0] => drwxr-xr-x
                            [1] => 1
                            [2] => ftp
                            [3] => ftp
                            [4] => 0
                            [5] => Mar
                            [6] => 09
                            [7] => 15:23
                            [8] => 1999 - Ordner 3 gross
                        )
                        1. rechte (linux/unix) das d steht für directory und dann 3 mal ein dreier block für user/group/other (mache dich da mal mit google schlauer, wenns dich interessiert)
                        2. sehr ungewöhnlich ...
                        3. user
                        4. group
                        5. siehe 2
                        6. monat der dateierstellung / oder letzte änderung
                        7. entsprechend tag
                        8. und uhrzeit
                        9. und jahr + das komische eben
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          "und jahr + das komische eben"

                          sorry
                          hätte ich erklären sollen.
                          Das ist das der Name vom Ordner. Hatte voher mit preg_match das Problem das ich 2 mal hintereinander die Jahreszahl hätte kommen können.

                          Datum sieht so aus
                          Mar 15 22:20 => Aktuelles Jahr mit dem Monat März dem Tag 15 und der Uhrzeit:
                          Mar 15 1999 => Monat März, Tag 15, und dem Jahr 1999

                          Das Problem war jetzt wenn ich einen Ordner oder Datei habe die folgendermassen begonnen hat
                          1999 - Ordner 3
                          2000 Datei 2.2.zip
                          dann wurde die Jahreszahl von der Datei weggenommen und dem Datum zugerechnet durch das preg match halt.
                          Ergebnis war dann
                          Datum: Mar 15 1999 1999
                          Datei/Verzeichnis: - Ordner 3

                          somit ist das Verzeichnis oder die Datei falsch und er kann mir nicht ins Verzeichnis wechseln da es den Ordner "- Ordner 3" ja nicht gibt.


                          Lass jetzt das Skript mal durch alle Verzeichnisse laufen und schreib dann obs geklappt hat oder nicht!!!

                          Mfg Markus

                          Kommentar


                          • #14
                            wenn 'Ordner 3 gross' ein ordner ist, erklärt sich auch , warum er bei [ ]+ das nicht noch einmal getrennt hat. das leerzeichen war garantiert escaped, da es ja zum namen gehört. klingt für mich zumindest logisch...
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              PHP-Code:
                              text_array split("[ ]+",$text,9); 
                              die 9 bedeutet nur bis zu welchem leerzeichen der String
                              aufgespaltet werden soll

                              Blessings !
                              [font=dauphin]Die Seite für Spychos[/font]

                              Kommentar

                              Lädt...
                              X