Zip entpacken ohne zip() ?!

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

  • Zip entpacken ohne zip() ?!

    Hi,

    hab ein schönes uploadscript für eine Bildergalerie geschrieben,
    das Bilder ohne Probleme schön über ftp() hochläd.

    Nun habe ich eine Überprüfung eingebaut wenn man eine .zip datei
    hochläd das dieser dann entpackt werden soll und in einer Schleife
    jede Datei darin lesen soll und in ein bestimmtes verzeichnis entpacken
    soll.

    Mein Problem ist das ich nur

    BZip2 Version 1.0.2, 30-Dec-2001

    zur Verfügung hab

    Wollte auch schon diese class benutzen:
    http://www.php-resource.de/forum/sho...n&pagenumber=1

    aber irgendwie bringt der mit
    immer folgendes:


    PHP-Code:
    Fatal errorCall to a member function on a non-object in /homepages/3/d100725797/htdocs/tts_fussballschule/galerie/admin/inc_upload.php on line 16 
    Kennt von Euch jemand ne gute Klasse die ich benutzen könnte?

    Gruß
    Tom

  • #2
    Was steht denn auf Zeile 16...?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      PHP-Code:
      foreach ($_FILES as $file) {

          
      // Wenn ein Zip File dann entpacken
          
      IF(eregi("^.*(.zip)$"$file['name']))
          {
          echo 
      $file['name']." ist eine zip Datei!";
              
              require(
      "inc_zipclass.php");
              
              
      $example->extractfile($file['tmp_name']); // Zeile 16
              
              
      printr ($example);
                  
          
      $ist_bild "";
          }

      }[ 

      Kommentar


      • #4
        Woher kommt denn $example? Du hast ja noch garkein Objekt erzeugt

        Übrigens: Mach aus dem require mal ein require_once...
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          also das steht in der Anleitung der class:

          SRY kenn mich mit klassen noch gar ned aus

          PHP-Code:

          /*------------------------------------------------------------
           | To output files:
           | $example->getdata();
           | -returns file contents
           |
           | $example->filedownload($filename);
           | -filename - the name to give the file that is being sent
           |
           | $example->filewrite($filename,$perms); // perms optional
           | -filename - the name (including path) of the file to write
           | -perms - permissions to give the file after it is written
           +------------------------------------------------------------*/

          /*------------------------------------------------------------
           | To extract files (tar and gzip)
           | $example->extract($data);
           | -data - data to extract files from
           | -returns an array containing file attributes and contents
           |
           | $example->extractfile($filename);
           | -filename - the name (including path) of the file to use
           | -returns an array containing file attributes and contents
           |
           | Both functions will return a string containing any errors
           +------------------------------------------------------------*/ 

          Kommentar


          • #6
            Also hab mich nach ein paar Tagen Pause mal wieder ranngehockt.
            Wie es scheint muss ich die klasse irgendwie zum laufen bringen,
            weil bei mir safemode aktiviert ist und daher exec, system nicht aktiviert....
            das zip modul ist auch nicht installiert und kann auch nicht installiert
            werden auf dem Webserver...

            So ich hoffe mal ihr könnt mir bei dem ansprechen der zip_class ein
            wenig helfen...

            Mein Script macht im Moment nur folgendes schaut beim absenden des
            Formulars nach ob es eine tar datei ist wenn ja, läd sie die datei in
            meinen "img_import" Ordner...

            so weit so gut jetzt soll er ja die datei da entpacken dazu benutz ich
            folgenden Code:

            PHP-Code:
            foreach($_FILES as $file){
                
                    if(
            eregi(".*([.][tar])"$file['name']))
                    {
                    
                    
            $ordner_img "img"// Orginalbilder
                
            $ordner_import "img_import"// Tempordner für Bilder Import
                
            $ordner_tmp "img_tmp"// Tempordner für Thumbnails
                    
            $serverroot $_SERVER['DOCUMENT_ROOT'].'/bilder/galerie';
                    
                    
            //Testfile heisst: test.tar
                    
            $pfad_put $ziel_ftp.'/'.$ordner_import;
                    echo 
            $file['name']." ist eine Zip-Datei!<br><br>";
                    
                    
            //--------- FTP LOGIN & Upload -------
                                  
                  //herstellen der Verbindung
                  
            $connect ftp_connect($host,$port);
                  IF(!
            $connect) die ("FTP Verbindungsaufbau gescheitert, ");
                  
                  
            //Einloggen mit Benutzername und Kennwort
                  
            $log ftp_login($connect$user$pass);
                  IF(!
            $log) die ("FTP Login gescheitert, ");
                  
                  
            // Wenn die Verbindung & der Login geklappt hat dann ausführung des Skriptes
                  // Verzeichniswechsel
                  
            ftp_chdir($connect,$pfad_put);
                  
                  
            // File Upload
                  
            $trans ftp_put($connect,$file['name'],$file['tmp_name'],FTP_BINARY);
                  IF(!
            $trans) die ("FTP Upload gescheitert, ");
                        
                  
            ftp_quit($connect);
                        
                        require_once(
            "inc_zipclass.php");
                        
                  
            $gezippt= new gzfile();
                  
            $content $gezippt->extractfile($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
                  
            $tar = new tarfile();
                  
            $content $tar->extract($content['data']);
                  
                  foreach(
            $content as $file_new)
                  {
                  
            $fp=fopen($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'."{$file_new['filename']}",'wb');
                  
            fwrite($fp,"{$file_new['data']}");
                  
            fclose($fp);
                        }
                                            
                    
            $ist_bild "";
                    } 
            Leider macht der gar nix außer mir mein File hochzuladen

            habs grad noch mit dem .gz file probiert kam wenigstens ja schon mal ne Fehlermeldung

            PHP-Code:
            DB77667.gz ist eine gz/tar Datei!


            Warninggzinflate() [function.gzinflate]: data error in /home/www/htdocs/thomas-reichelt.net/bilder/galerie/admin/inc_zipclass.php on line 359 
            LINE 359: data = gzinflate(substr($data,$offset,strlen($data)-8-$offset));
            Zuletzt geändert von tomtherock; 27.09.2006, 09:16.

            Kommentar


            • #7
              hat bisher noch keiner diese zip_class zum laufen gebracht?

              -> http://www.php-resource.de/forum/sho...n&pagenumber=1

              Komm echt nicht weiter ...

              Kommentar


              • #8
                Soooo endlich geschafft zwar mit einem anderer Zipclass aber es funzt super und mit minimal Anforderungen!!! Und vorallem ohne exec oder system oder zip .


                zip Class-> http://www.phpconcept.net/

                in der Zip Class hab ich folgendes geändert:
                PHP-Code:
                // Pfad des Root Verzeichnis der Webspace Beispiel: /home/www/htdocs/rd-network.de/test
                // Für Verzeichnisscripte mit PHP Befehlen Beispiel: f_open, f_nlist 
                $serverroot $_SERVER['DOCUMENT_ROOT'].'/test/galerie';

                $ordner_img "img"// Orginalbilder
                $ordner_import "img_import"// Tempordner für Bilder Import
                $ordner_tmp "img_tmp"// Tempordner für Thumbnails

                  // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
                  // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
                  
                define'PCLZIP_TEMPORARY_DIR'$serverroot.'/'.$ordner_img.'/'.$ordner_import.'/' ); 


                hier mein Code:

                PHP-Code:

                // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< zip datei >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                IF($speichern){
                $ist_bild 1;

                //zip datei werden über ein formular hochgeladen
                 
                foreach($_FILES as $file){
                    
                        if(
                eregi(".*([.][zip])"$file['name']))
                        {
                        
                        
                $ordner_img "img"// Orginalbilder
                    
                $ordner_import "img_import"// Tempordner für Bilder Import
                    
                $ordner_tmp "img_tmp"// Tempordner für Thumbnails
                        
                $serverroot $_SERVER['DOCUMENT_ROOT'].'/bilder/galerie';
                        
                        
                        
                $pfad_put $ziel_ftp.'/'.$ordner_import;
                        echo 
                $file['name']." ist eine ZIP Datei!<br><br>";
                        
                        
                //--------- FTP LOGIN & Upload -------
                                      
                      //herstellen der Verbindung
                      
                $connect ftp_connect($host,$port);
                      IF(!
                $connect) die ("FTP Verbindungsaufbau gescheitert, ");
                      
                      
                //Einloggen mit Benutzername und Kennwort
                      
                $log ftp_login($connect$user$pass);
                      IF(!
                $log) die ("FTP Login gescheitert, ");
                      
                      
                // Wenn die Verbindung & der Login geklappt hat dann ausführung des Skriptes
                      // Verzeichniswechsel
                      
                ftp_chdir($connect,$pfad_put);
                      
                      
                // File Upload
                      
                $trans ftp_put($connect,$file['name'],$file['tmp_name'],FTP_BINARY);
                      IF(!
                $trans) die ("FTP Upload gescheitert, ");
                            
                      
                            
                // ENTPACKEN
                            
                require_once('inc_zipclass2.php');
                      
                $archive = new PclZip($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
                      if (
                $archive->extract() == 0) {
                        die(
                "Error : ".$archive->errorInfo(true));
                      }
                            
                      
                $archive = new PclZip($serverroot.'/'.$ordner_img.'/'.$ordner_import.'/'.$file['name']);
                      if (
                $archive->extract(PCLZIP_OPT_PATH$serverroot.'/'.$ordner_img.'/'.$ordner_import) == 0) {
                        die(
                "Error : ".$archive->errorInfo(true));
                      }
                            
                // ENDE ENTPACKEN

                            //danach Archiv löschen!
                            
                $delete ftp_delete($connect,$file['name']);
                        IF(!
                $delete) die ("($file['name'])FTP delete gescheitert.<br>");
                            echo 
                "<b>".$file['name']." wurde entpackt und wieder gelöscht die Bilder werden nun verarbeitet...</b><br>"
                danach liegen die Bilder in dem Ordner img_import...danach kann man sie
                ja wie ich zb einlesen lassen und dann umbennen in db abspeichern und in
                nen Ordner verschieben. Jeder wie er´s eben braucht .

                Ich hoffe das ich einige damit helfen kann und ne lange such erspare .

                Grüße
                Tom

                Kommentar

                Lädt...
                X