Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] ZipArchiv vereinfachen....

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] ZipArchiv vereinfachen....

    Hallo zusammen,

    ich möchte einen Ausschnitt aus meiner Klasse vorstellen und eure Meinung dazu hören. Ob ich noch etwas hinzufügen sollte, ob etwas redundant ist.
    Warum ich das möchte?
    Nun ich könnte zwar das ganze selber nochmal unter die Lupe nehmen, aber wieviel Sinn macht es schon, sich selbst zu testen und zu bewerten

    PHP-Code:

       
    public function getFilesFromSubDirs($dir)
       {
          
    $fileNameOnServer = array();
          
    $files            = array();
          
    $files scandir($dir);
          unset(
    $files[0]);
          unset(
    $files[1]);
          foreach (
    $files as $filename)
          {
             if(
    is_dir($dir."/".$filename))
             {
                
    $fileNameOnServerArray $this->getFilesFromSubDirs($dir."/".$filename);
                foreach (
    $fileNameOnServerArray as $value)
                {
                   
    $fileNameOnServer[] = $value;
                }
             }
             else
             {
                if(
    strcmp("Thumbs.db"$filename))
                {
                   
    $fileNameOnServer[] = $dir."/".$filename;
                }
             }
          }
          return 
    $fileNameOnServer;
       } 
    In der vorhandenen Klasse ZipArchiv habe ich keine Möglichkeit gefunden, einen ganzen Ordner zu zippen. Und die im Ingternet zu findenden Lösungen, gefielen mir einfach nicht.
    Ich denke diese Funktion gibt einem das nötige Array um ausserhalb dieser Funktion in einer Schleife die einzelnen Elemente per addFile() dem Zip hinzuzufügen und das ganze mit der gleiche Ordner Strucktur zu versehen.

    Dann kritikiert mal los , bzw danke für Infos was ich noch beachten sollte.
    Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen


  • #2
    Ein RekursiveDirectoryIterator dürfte um einiges schneller sein.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      Ein RekursiveDirectoryIterator dürfte um einiges schneller sein.
      Alter Schwede...
      Danke dir, den kannt ich noch nicht...das macht es um einiges schnell, kürzer und wahuuuuhiger
      Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

      Kommentar


      • #4
        so geändert, getestet, gestaunt

        Nochmals danke, das ist echt super praktisch
        PHP-Code:

           
        /**
            * @method zipFolder
            * zippt einen kompletten Ordner mit Unterverzeichnissen
            */
           
        public function zipFolder()
           {
              
        $folder;
              
        $path;
              
        $filesToZip;
              
        $dirAndFilenameInZip;
              
        $return true;

              
        $path $this->folder."/";
              
        $rdi = new RecursiveDirectoryIterator($path);
              foreach (new 
        RecursiveIteratorIterator($rdi) as $pathAndFilename)
              {
                 
        $folder str_replace("\\""/"$pathAndFilename);
                 
        $dirAndFilenameInZip substr(str_replace($this->folder""$pathAndFilename),1);
                 if(
        $this->zip->addFile($folder,$dirAndFilenameInZip))
                 {
                    
        //Weiter
                 
        }
                 else 
                 {
                    
        $this->zip->close();
                    
        unlink($this->zipFilename);
                    
        $return false;
                    break;
                 }
              }
              return 
        $return;
           } 
        Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

        Kommentar


        • #5
          Zitat von Moewe Beitrag anzeigen
          PHP-Code:
          $folder;
          $path;
          $filesToZip;
          $dirAndFilenameInZip
          ?!
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            Solche speziellen Sachen
            PHP-Code:
            if(strcmp("Thumbs.db"$filename)) .. 
            haben in einer Zip-Klasse m.E. nicht zu suchen.
            Dann lohnt es darüber nachzudenken, ob bei einem rekursiven Archvieren immer alle Dateien mitgenommen werden sollen oder nur bestimmte Dateien.
            Ich habe bei einem ähnlichen Vorhaben festgestellt, daß die Zeit für die Dateisuche gegenüber dem zippen nicht so ins Gewicht fällt. Hab mich deshalb entschieden glob() zu benutzen, um gleich geeignet zu filtern.

            Edit: Post's ab #4 noch nicht gesichtet.
            Edit2: warum nicht als Klassenerweiterung (extends ZipArchive) ?
            PHP-Klassen auf github

            Kommentar


            • #7
              @rkr Also da ich bei der oop in php noch sehr in den Blagenfüßen stecke wollte ich so die Variablen decklarieren...hab dazu auch nichts anderes gefunden.
              Versucht habe ich ebenso var $foo und var String $foo und String $foo.
              Und ähnliche Konstruckte.

              Edit2: warum nicht als Klassenerweiterung (extends ZipArchive) ?
              Hatte ich auch schon drüber nach gedacht, war aber bei mir der Schritt zwei....Aber danke für die ungewollte Befürwortung
              Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

              Kommentar


              • #8
                Wunderprächtig...

                Der Klassenname ist damit auch logisch. Da sie ZipArchiv extended heißt die Klasse natürlich XzipIt :P
                Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                Kommentar


                • #9
                  Hallöchen,

                  Zitat von Moewe Beitrag anzeigen
                  ich möchte einen Ausschnitt aus meiner Klasse vorstellen und eure Meinung dazu hören.
                  Um Antwort von tkausl zu ergänzen: wirf mal einen Blick darauf: How to zip a whole folder using PHP

                  Zitat von Moewe Beitrag anzeigen
                  getFilesFromSubDirs($dir)
                  Dirs?

                  Zitat von Moewe Beitrag anzeigen
                  PHP-Code:
                  if(strcmp("Thumbs.db"$filename)){
                      
                  $fileNameOnServer[] = $dir."/".$filename;

                  Und was ist bspw. mit .DS_Store? Dieser Part sollte konfigurierbar sein oder im Idealfall ausgelagert werden.

                  Generell würde ich der Methode einfach einen Iterator entgegenwerfen, der sich um derartige Belange kümmert und somit auch frei gestaltet werden kann. Stichwort: Single-Responsibility.

                  Edit zu Post #4:
                  PHP-Code:
                  $rdi = new RecursiveDirectoryIterator($path); 
                  Der Iterator gehört m.E. von außen in die Klasse injiziert (siehe oben).

                  Edit zu Post #7:
                  Zitat von Moewe Beitrag anzeigen
                  @rkr Also da ich bei der oop in php noch sehr in den Blagenfüßen stecke wollte ich so die Variablen decklarieren...hab dazu auch nichts anderes gefunden.
                  Versucht habe ich ebenso var $foo und var String $foo und String $foo.
                  Und ähnliche Konstruckte.
                  Durch wildes herumprobieren wirst du auch nicht schlauer. Hier ein paar lesenswerte Auszüge aus der Dokumentation:
                  http://php.net/manual/de/language.variables.basics.php
                  http://php.net/manual/de/language.variables.scope.php
                  http://php.net/manual/de/language.va...s.variable.php

                  PS: Konstrukt. Deklaration.

                  Viele Grüße,
                  lotti

                  Kommentar


                  • #10
                    Manche Sachen bekommt man durch probieren schneller raus. Was bewirkt denn nun eine solche Zeile?
                    PHP-Code:
                    $path
                    Testen: 10 Sekunden
                    Lesen: nach 2 minuten aufgegeben
                    PHP-Klassen auf github

                    Kommentar


                    • #11
                      Zitat von jspit Beitrag anzeigen
                      Manche Sachen bekommt man durch probieren schneller raus. Was bewirkt denn nun eine solche Zeile?
                      PHP-Code:
                      $path
                      Von Java aus, kenne ich es so eine Variable zu deklarieren, indem ich einfach sage "int zahl;" fertig.
                      Da ich nicht schreiben will
                      path = "";
                      hab ich gehofft es sei allgemein anerkannt einfach nur path; zu schreiben
                      JavaBeispiel
                      Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                      Kommentar


                      • #12
                        Es ist allgemein fraglich Variablen als eine Command Instruction zu schreiben ( nichts mit ihr zu tun ), ja.

                        PHP ist nicht Java.

                        Warum closed du eigentlich bei jeder Datei die Zip ?
                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar


                        • #13
                          Eine einzelne Variable ohne Zuweisung, da geht PHP großzügig drüberweg (Noch nicht mal eine Notice).
                          PHP-Code:
                          $path;
                          var_dump($path);  //Notice: Undefined variable: path in ... on line 2
                          $path '';
                          var_dump($path);  //string(0) "" 
                          Die Variable ist auch nicht definiert, s. var_dump Zeile 2.
                          Da du auf jeden Fall $path im Code einen Wert zuweist, ist hier eine Initialisierung überflüssig.
                          PHP-Klassen auf github

                          Kommentar


                          • #14
                            Hallöchen,


                            1.
                            Zitat von lottikarotti Beitrag anzeigen
                            wirf mal einen Blick darauf
                            2.
                            Zitat von lottikarotti Beitrag anzeigen
                            Dirs?
                            3.
                            Zitat von lottikarotti Beitrag anzeigen
                            Und was ist bspw. mit .DS_Store?
                            4.
                            Zitat von lottikarotti Beitrag anzeigen
                            Stichwort: Single-Responsibility.

                            Danke dir, zu deinen Anmerkungen:
                            1. Ich hab es jetzt überflogen und es kommt meiner neuen Version sehr nahe
                            2. Directorie(s) sollten mehrere Unterordner vorhanden sein...oder versteh ich deine Frage nicht
                            3. Das habe ich komplett entfernt. Erstmal sollte alles gezippt werden...bei ausnahmen würde ich etwas derartiges wie (glob())(ebenfalls guter tipp) verwenden
                            4. Werde ich mir anschauen.


                            Zudem gut zu wissen, klar ist PHP nicht Java. Konnte diebezüglich bisher nichts finden....aber danke für die Info
                            Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                            Kommentar


                            • #15
                              sorry wollte ändern
                              Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                              Kommentar

                              Lädt...
                              X