Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] zipArchive lesen einer Datei mit file()

Einklappen

Neue Werbung 2019

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

  • [Erledigt] zipArchive lesen einer Datei mit file()

    Hallo

    Ich versuche verzweifelt eine Sql Datei zu lesen von einem ZipArchive mit der file() Funktion.

    Ich habe in meiner Unzip Klasse eine Methode welchen mir den Inhalt zurück gibt:
    PHP-Code:
        public function getFileContent($file) {
            if (
    $this->_zip_open === false) { $this->addMessage('Zip is not open!'); return false; }
            if (
    $this->_zip->locateName($file) === false) {
                
    $this->addMessage('Method FileContent '.$file.' does not exists in Zip!');
            }
            return 
    $this->_zip->getFromName($file);
        } 
    Leider benötige ich aber die file() Funktion weil diese mir ein Array der Zeilen zurück gibt, welches ich benötige.

    Doch was immer ich mache gibt es mir ein Fehler zurück das der Pfad nicht existiert. Doch wie lautet den der Pfad? Den das ZipArchive ist ja nur temporär zu diesem Zeitpunkt.

    Hier mal mein Versuch:
    PHP-Code:
        public function getFileContentArray($file) {
            if (
    $this->_zip_open === false) { $this->addMessage('Zip is not open!'); return false; }
            if (
    $this->_zip->locateName($file) === false) {
                
    $this->addMessage('Method FileContent '.$file.' does not exists in Zip!');
            }
            return 
    file($this->_zip->getStream($file));
        } 
    Hoffe mir kan da jemand helfen. Besten Dank im voraus.

  • #2
    http://php.net/manual/en/wrappers.compression.php

    Kommentar


    • #3
      Hey Danke Dir moma. Doch irgendwie komme ich nicht and das temproräre Zip file dran.

      PHP-Code:
          public function getFileContentArray($file) {
              if (
      $this->_zip_open === false) { $this->addMessage('Zip is not open!'); return false; }
              if (
      $this->_zip->locateName($file) === false) {
                  
      $this->addMessage('Method FileContent '.$file.' does not exists in Zip!');
              }

              return 
      file('zip://com_test.zip#db.sql'));
          } 
      Gibt mir folgende Meldung zurück:
      Warning: file(zip://com_test.zip#db.sql): failed to open stream: operation failed

      Geht den das garn nicht mit file() wenn das Zip noch nicht extracted wurde?

      Kommentar


      • #4
        // beitrag gelöscht.

        Kommentar


        • #5
          Weiss zwar nicht was Du meintest mit "// schwachfug" aber so hats nun endlich geklappt.

          PHP-Code:
              public function getFileContentArray($file) {
                  if (
          $this->_zip_open === false) { $this->addMessage('Zip is not open!'); return false; }
                  if (
          $this->_zip->locateName($file) === false) {
                      
          $this->addMessage('Method FileContent '.$file.' does not exists in Zip!');
                  }
                  
                  
          $previous_encoding mb_internal_encoding();
                  
          mb_internal_encoding('UTF-8');
                  
          $content file('zip://' $this->_zip->filename '#'.$file);
                  
          mb_internal_encoding($previous_encoding);
                  return 
          $content;
              } 
          Komischerweise bekomme ich aber dies am Anfang geschrieben
          Code:
          
          Ich habe gelesen das man dies mit dem setzen von "mb_internal_encoding" verhindern kann. Leider schreibt mir es aber immer noch dazu. Kennt den da jemand einen Trick?

          Kommentar


          • #6
            Ok habe das Problem gelöst. So klappt alles richtig:
            PHP-Code:
                public function getFileContentArray1($file) {
                    if (
            $this->_zip_open === false) { $this->addMessage('Zip is not open!'); return false; }
                    if (
            $this->_zip->locateName($file) === false) {
                        
            $this->addMessage('Method FileContent '.$file.' does not exists in Zip!');
                    }
                    
                    
            $handle fopen('zip://' $this->_zip->filename '#'.$file"r"); 
                    
            $lines = array();
                    if (
            $handle) {
                       while (!
            feof($handle)) {
                           
            $lines[] = utf8_decode(fgets($handle4096));
                       }
                       
            fclose($handle);
                    }
                    return 
            $lines;
                } 

            Kommentar

            Lädt...
            X