Ankündigung

Einklappen
Keine Ankündigung bisher.

Verzeichnis verschluckt

Einklappen

Neue Werbung 2019

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

  • Verzeichnis verschluckt

    Ich bin gerade dabei, unter Joomla eine Art automatisierte Lizenzverwaltung zu schreiben, welche mir auch die Verzeichnisse der Artikel einlesen soll, damit diese Dateien im Header die richtige Lizenznummer bekommen.

    Das Ergebnis des Einlesens will ich auf der Webseite (im Backend) darstellen, es sollte ungefähr so aussehen:
    Code:
    array (size=18)   1 =>      array (size=1)       'orw_control_115/docs/' =>          array (size=2)           0 => string 'orw_control_115/docs/anleitung_installation.html' (length=48)           1 => string 'orw_control_115/docs/anleitung_update.html' (length=42)   2 =>      array (size=1)       'orw_control_115/docs/images/' =>          array (size=2)           0 => string 'orw_control_115/docs/images/bg_dark.png' (length=39)           1 => string 'orw_control_115/docs/images/bg_light.png' (length=40)   3 =>



    Also zuerst ein Key im Array, darin das Verzeichnis als Array und darin die Dateien, welche in diesem Verzeichnis liegen, allerdings verschluckt PHP ab und zu ein paar Verzeichnisse und wirft den Inhalt 2-3 Verzeichnisse einfach in ein einziges, das wäre bei der späteren Installation richtig epic.

    ZB.:
    Code:
      15 =>      array (size=1)       'orw_control_115/upload/wiso_includes/class/mail/clients/' =>          array (size=36)           0 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/basic_sasl_client.php' (length=77)           1 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/cram_md5_sasl_client.php' (length=80)           2 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/digest_sasl_client.php' (length=78)           3 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/index.html' (length=66)           4 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/login_sasl_client.php' (length=77)           5 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/ntlm_sasl_client.php' (length=76)           6 => string 'orw_control_115/upload/wiso_includes/class/mail/clients/plain_sasl_client.php' (length=77)           7 => string 'orw_control_115/upload/wiso_includes/class/mail/index.html' (length=58)           8 => string 'orw_control_115/upload/wiso_includes/class/mail/wiso.class.message.mail.php' (length=75)           9 => string 'orw_control_115/upload/wiso_includes/class/mail/wiso.class.message.smtp.php' (length=75)           10 => string 'orw_control_115/upload/wiso_includes/class/mail/wiso.class.sasl.php' (length=67)           11 => string 'orw_control_115/upload/wiso_includes/class/mail/wiso.class.smtp.php' (length=67)           12 => string 'orw_control_115/upload/wiso_includes/class/wiso.class.aktionen.php' (length=66)           13 => string 'orw_control_115/upload/wiso_includes/class/wiso.class.captcha.php' (length=65)           14 => string 'orw_control_115/upload/wiso_includes/class/wiso.class.cron.php' (length=62)
    Am Pfad kann man erkennen, das dort eigentlich 2 Verzeichnisse zusammen geworfen wurden, welches so nicht sein sollte.
    Die Verzeichnisse werden beim Einlesen durch eine statische Variable geprüft, damit genau das nicht passiert.

    In der Klasse sind folgende Vars deklariert:
    PHP-Code:
    protected $count 0;
    protected 
    $article_items = array ();
    protected static 
    $last_dir ''
    PHP-Code:
       public function readArticleDir ($article_dir)
        {
            
    $entrys = \scandir ($article_dir);

            foreach (
    $entrys as $entry)
            {
                if (
    $entry != '.' && $entry != '..')
                {
                    if (
    is_dir ($article_dir $entry))
                    {
                        if (
    self::$last_dir !== $article_dir $entry)
                        {
                            
    self::$last_dir $article_dir $entry;
                            
    $this->count++;
                        }
                        
    self::readArticleDir ($article_dir $entry '/');
                    }
                    else
                    {
                        
    $this->article_items[$this->count][self::$last_dir][] = $article_dir $entry;
                    }
                }
            }
        } 
    Aber wo liegt da der Fehler?
    Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat


  • #2
    Wie schade, das man nach all den Jahren noch immer keinen Code darstellen kann, welcher die Einrückungen beibehält
    Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat

    Kommentar


    • #3
      warum benutzt du nicht einfach http://php.net/recursivedirectoryiterator#85805 statt scandir ?
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

      Kommentar


      • #4
        Das ist doch totaler Oversize, ich will doch nur an 1 Stelle im Script ein Verzeichnis auslesen
        Mit der Klamotte müsste ich noch eine dicke Klasse schreiben, um das gewünschte Ergebnis zu bekommen.
        Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat

        Kommentar


        • #5
          Zitat von breaker Beitrag anzeigen
          Das ist doch totaler Oversize, ich will doch nur an 1 Stelle im Script ein Verzeichnis auslesen
          Mit der Klamotte müsste ich noch eine dicke Klasse schreiben, um das gewünschte Ergebnis zu bekommen.
          das ist doch quatsch..

          statt
          PHP-Code:
            public function readArticleDir ($article_dir)
              {
                  
          $entrys scandir ($article_dir);

                  foreach (
          $entrys as $entry)
                  {
                      if (
          $entry != '.' && $entry != '..')
                      {
                          if (
          is_dir ($article_dir $entry))
                          {
                              if (
          self::$last_dir !== $article_dir $entry)
                              {
                                  
          self::$last_dir $article_dir $entry;
                                  
          $this->count++;
                              }
                              
          self::readArticleDir ($article_dir $entry '/');
                          }
                          else
                          {
                              
          $this->article_items[$this->count][self::$last_dir][] = $article_dir $entry;
                          }
                      }
                  }
              } 
          wirste eben das haben

          PHP-Code:
            public function readArticleDir ($article_dir)
              {
          $path realpath($article_dir);

          $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
          foreach(
          $objects as $name => $object){
           if(
          $object->isDir()){continue;}
              
          $this->article_items$object->getPathname()][]=$name;
          }
              
          var_dump($this->article_items);
              } 
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

          Kommentar


          • #6
            Damit habe ich aber 1 Array, wo alles drin ist, mein Ziel war, das ich 1 Array habe, wo die Verzeichnisse jeweils ein weiteres Array bilden, wo die Dateien drin liegen.

            So ungefähr sollte es sein, allerdings sollten die Verzeichnisse als Array-Key mit Namen sein, zb.

            array ('0' => '<dirname>' = array ('<file1>', '<file2>', '<file3>')),
            array ('1' => '<dirname>' = array ('<file4>', '<file5>', '<file6>'))

            usw.

            Bis auf die Keys läuft es ja auch
            Angehängte Dateien
            Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat

            Kommentar


            • #7
              PHP-Code:
              $path realpath($article_dir);

              $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path,RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
              $article_items = array();
              foreach(
              $objects as $name => $object){
                  if(
              $object->isDir()){continue;}
                  
              $article_items[$object->getPath()][]=$object->getFilename();
              }
              var_dump($article_items);
              $this->article_items $article_items
              damit kriege ich eine Ausgabe wie

              aarray (size=10)
              '/var/www/tests/frontend/js' =>
              array (size=3)
              0 => string 'MIT.LICENSE' (length=11)
              1 => string 'jquery-1.11.1.min.js' (length=20)
              2 => string 'SpecRunner.html' (length=15)
              '/var/www/tests/frontend/js/spec' =>
              array (size=3)
              0 => string 'SpecHelper.js' (length=13)
              1 => string 'JournalMetricSpec.js' (length=20)
              2 => string 'PlayerSpec.js' (length=13)
              ich verstehe immer noch nicht wo das Problem liegt
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

              Kommentar


              • #8
                Ich schaue mir die Klasse mal an, damit bin ich bestimmt flexibler als mit scandir,- wobei dein Ergebnis dem Inhalt meines Bildes entspricht
                Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat

                Kommentar

                Lädt...
                X