Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zip Archive mit PHP erstellen - Kein Fehler, aber ZIP Archiv ist nicht da

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Zip Archive mit PHP erstellen - Kein Fehler, aber ZIP Archiv ist nicht da

    Hallo Leute,

    ich würde gerne ein ZIP Archive mit PHP erstellen und Bilder aus Ordnern da rein packen. Es wird "Kein Fehler" ausgegeben, es läuft also alles wunderbar durch. Nur existiert die Datei einfach nirgendwo auf dem Speicher.
    Wie kann das sein?

    Hier der Code
    PHP-Code:
    $zip = new ZipArchive();
    $res $zip->open("./bfsw_bilder/downloads/".$galeriename_arr->kategoriename.".zip"ZIPARCHIVE::CREATE);
    if(
    $res === TRUE)
    {
         
    $zip->addEmptyDir("download_fremdsprachenwettbewerb_bilder");
         while(
    $fotos mysql_fetch_object($hole_fotos_erg))
         {
              
    $zip->addFile("./bfsw_bilder/".$fotos->fotoname,$fotos->fotoname);
         }
         
    $zip->close(); 
         echo 
    "Kein Fehler";
    }
    else
    {
         echo 
    "Fehler";

    Um ein paar Fragen vorwegzunehmen.
    Ja, das Verzeichnis existiert.
    Ja, das PHP kann mit ZIP Archiven umgehen, es entpackt in einem anderem Script auch welche (außerdem kein PHP Fehler).
    Ja, $galeriename_arr->kategoriename ist mit einem String belegt.
    Ja, $fotos ist mit mehreren Fotos belegt.

    Ich hoffe ihr könnt mir weiter helfen.

    Danke!

    Gruß

    robat

  • phochstr
    antwortet
    Die lieben Pfade...

    Danke für diesen Thread - hatte genau dasselbe Fehlerbild - kein piep bis zum close, und dann lauter nichts.

    Grund war einfach: Ich hab' das ZIP File in einem Verzeichnis angelegt, wo auch die zu komprimierenden Dateien lagen, habe aber diese Dateien ohne Pfadangabe mit add hinzugefügt .

    Manchmal brauchts einfach etwas länger, bis einem die Schuppen aus den Haaren, äh, von den Augen fallen - Pfad hinzugefügt und schon ist alles palletti .

    Grüsse & Danke
    P.

    Einen Kommentar schreiben:


  • robat
    antwortet
    Ja, das war genau das, was ich meinte. Das war komisch

    Aber wie von lstegelitz gesagt, es funktioniert und das Ziel ist erreicht, ich danke euch

    Also [ERLEDIGT]

    Einen Kommentar schreiben:


  • G.Schuster
    antwortet
    Ich muss robat in diesem Fall allerdings Recht geben - ./pfad ist eine durchaus korrekte Notation für eine relative Pfadangabe, genauer gesagt bringt mich "cd ./pfad" in genau das gleiche Verzeichnis wie "cd pfad", also würde ich von einer Identität beider Notationen ausgehen.
    Ich kenne zumindest spontan kein BS, dass das als Fehler wertet.
    Dass man da dann keine Fehler vermutet kann ich nachvollziehen.

    Einen Kommentar schreiben:


  • robat
    antwortet
    Zitat von lstegelitz Beitrag anzeigen
    Sei's drum, gelöst ist gelöst. Weiterhin viel Erfolg
    Genau, warum streiten

    Wir wollen ja auch in Zukunft weiter zusammenarbeiten

    Danke!

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Zitat von robat Beitrag anzeigen
    Ja, nicht alter Schwede, sondern der Pfad war RICHTIG.
    Naja, scheinbar nicht, sagst du ja selber...
    Zitat von robat Beitrag anzeigen
    Es darf nicht ./ heißen, sondern muss direkt mit bfsw_bilder/... losgehen.

    So ein kleiner Fehler mit so vielen Auswirkungen.
    Sei's drum, gelöst ist gelöst. Weiterhin viel Erfolg

    Einen Kommentar schreiben:


  • robat
    antwortet
    Ja, nicht alter Schwede, sondern der Pfad war RICHTIG. Nur das Zip-Archiv scheint das nicht zu akzeptieren. Jeder href und src ging wunderbar mit dem Punkt. Kann ja keiner ahnen, dass ZipArchive da seinen eigene Willen hat!
    Außerdem hat er den absoluten Pfad auch nicht akzeptiert!

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Alter Schwede, soweit waren wir beim 2. Post bereits...

    Zitat von lstegelitz Beitrag anzeigen
    Du arbeitest mit relativen Pfad, daher vermute ich den "Hänger" dort irgendwo...

    Einen Kommentar schreiben:


  • robat
    antwortet
    Okay, Problem gelöst.

    Es darf nicht ./ heißen, sondern muss direkt mit bfsw_bilder/... losgehen.

    So ein kleiner Fehler mit so vielen Auswirkungen.

    Aber ich danke euch allen, jetzt klappt es wunderbar, auch mit mehreren Bildern.

    mfg

    robat

    [ERLEDIGT]

    Einen Kommentar schreiben:


  • robat
    antwortet
    Okay, wir sind nen großen Schritt weiter.

    Ich habe jetzt auch einfach mal beides in das gleiche Verzeichnis gepackt:

    PHP-Code:
    $zip = new ZipArchive();
                        
    $res $zip->open($galeriename_arr->kategoriename.".zip"ZIPARCHIVE::CREATE ZIPARCHIVE::OVERWRITE);
                        echo 
    $zip->getStatusString();
                        if(
    $res === TRUE)
                        {
                            
    $fotos mysql_fetch_object($hole_fotos_erg);
                            
    $zip->addFile($fotos->fotoname);
                            echo 
    $zip->getStatusString();
                            
    $zip->close(); 
                            echo 
    $zip->getStatusString();
                            echo 
    "Kein Fehler";
                        }
                        else
                        {
                            echo 
    "Fehler";
                        } 
    So klappt es. Die ZIP wurde im selben Verzeichnis erstellt.

    Aber warum klappt es nicht, wenn ich einen Pfad davor angebe?

    Wenn ich das Bild über einen Pfad aufrufen will kommt der Fehler, wenn ich die ZIP an einem Pfad erstellen lassen will auch.

    Muss ich den Pfad vielleicht anders angeben?

    Im Prinzip ist die Struktur so:
    /
    bfsw_galerie_dl.php
    /bfsw_bilder
    /galerie
    /gross
    bildname.jpg
    /downloads
    hier_zip.zip

    Ich hoffe es ist erkennbar.

    und..danke

    Einen Kommentar schreiben:


  • G.Schuster
    antwortet
    Hm...ich hab's jetzt grade mal hiermit getestet:
    PHP-Code:
    <?php


    $zip 
    = new ZipArchive();
    $res $zip->open(dirname(__FILE__).'/test.zip'ZIPARCHIVE::CREATE ZIPARCHIVE::OVERWRITE);
    echo 
    $zip->getStatusString();
    if(
    TRUE === $res) {
          
    $zip->addFile(dirname(__FILE__).'/test.jpg''test.jpg');
          echo 
    $zip->getStatusString();
          
    $zip->close();
          echo 
    "Kein Fehler";
    }
    else {
          echo 
    "Fehler";
    }


    ?>
    Bild als test.jpg im gleichen Verzeichnis - hat einwandfrei geklappt.
    Was mir allerdings aufgefallen ist - den zweiten Parameter bei addFile() sollte man wohl doch besser angeben...bei mir hat's auf Windows sonst den gesamten Pfad im Zip erstellt.

    BTW, hübsche Hunde, hier springt ab und an auch ein schwarzer Labrador durch

    Einen Kommentar schreiben:


  • robat
    antwortet
    Ah ok, man lernt nie aus, danke

    So hier erstmal der Code:
    PHP-Code:
    include('connect.php');
    $hole_galeriename "SELECT kategoriename FROM galerie_bfsw WHERE kategorie='".$_GET['id']."'";
    $hole_galeriename_erg mysql_query($hole_galeriename);
    if(
    mysql_num_rows($hole_galeriename_erg) == 0)
    {
        echo 
    "<p id=\"fehler\"><img src=\"fehler.png\" alt=\"\"> Diese Kategorie existiert nicht! Download nicht m&ouml;glich</p>";
    }
    else
    {
        
    Error_Reporting(E_ALL);  
        
    $galeriename_arr mysql_fetch_object($hole_galeriename_erg);
        
    $hole_fotos "SELECT fotoname FROM galerie_bfsw_kategorien WHERE kategorieid='".$_GET['id']."'";
        
    $hole_fotos_erg mysql_query($hole_fotos);
        if(
    mysql_num_rows($hole_fotos_erg) == 0)
        {
            echo 
    "<p id=\"fehler\"><img src=\"fehler.png\" alt=\"\"> Diese Kategorie enth&auml;lt keine Bilder! Download nicht m&ouml;glich</p>";
        }
        else
        {
            
    $zip = new ZipArchive();
            
    $res $zip->open("/schule/deutsch/bfsw_bilder/downloads/".$galeriename_arr->kategoriename.".zip"ZIPARCHIVE::CREATE ZIPARCHIVE::OVERWRITE);
            echo 
    $zip->getStatusString();
            if(
    $res === TRUE)
            {
                
    $fotos mysql_fetch_object($hole_fotos_erg);
                
    $zip->addFile("/schule/deutsch/bfsw_bilder/galerie/gross/".$fotos->fotoname);
                echo 
    $zip->getStatusString();
                
    $zip->close(); 
                echo 
    $zip->getStatusString();
                echo 
    "Kein Fehler";
            }
            else
            {
                echo 
    "Fehler";
            }            
        }

    $fotos->fotoname hat immer den Wert 12048593384baa4bcd42974IMG_7290.JPG

    Das wäre dann das Bild hier:


    Hier der Link, was bei rauskommt: http://www.htnnet.de/schule/deutsch/...ie_dl.php?id=3

    mfg

    robat

    Einen Kommentar schreiben:


  • G.Schuster
    antwortet
    Wenn in der Doku ein Parameter in eckigen Klammern steht bedeuetet das in 99,9% der Fälle, dass er Optional ist.
    In diesem Fall heißt die Datei einfach genau so wie die Ursprungsdatei.
    Poste doch bitte den gesamten _aktuellen_ Minimal-Quellcode und am besten noch eine Datei, die du hinzufügen willst, dann kann man das mal testen.

    Einen Kommentar schreiben:


  • robat
    antwortet
    Also Ordner ist ausgeklammert und zweiter Parameter ist weg.
    Es bleibt bei dem Fehler.

    Aber laut
    PHP: ZipArchive::addFile - Manual
    muss doch ein zweiter Parameter gennannt werden, oder?
    Halt so, wie die Datei innerhalb des Archives heißen soll.

    Hier findet ihr dann noch die phpinfo, falls die jemand braucht: www.htnnet.de/schule/deutsch/php.php

    Einen Kommentar schreiben:


  • G.Schuster
    antwortet
    Hm, eigentlich nicht.
    Ich hab grad mal in meine Klasse reingeschaut, den einzigen Unterschied hab ich für die Flags gefunden, ich setze das so um (jeweils natürlich mit Fehlerabfragen):
    $zip = new ZipArchive();
    $zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

    Was mir grade noch auffält:
    >$zip->addFile("./bfsw_bilder/".$fotos->fotoname,$fotos->fotoname);
    Du gibst hier $fotos->fotoname als Dateinamen im Archiv an (2. Param) - lass das mal weg.
    Zudem macht's kaum Sinn, vorher einen Ordner zu erstellen (addEmptyDir()), es sei denn, dieser Verzeichnisname steht auch in $fotos->fotoname

    Dir bleibt also so eigentlich nur, es wirklich auf das absoluteste Minimum zu reduzieren, d.h. auch ptionale Parameter mal rauszuwerfen.
    Wenn es dann immer noch nicht geht liegt die Vermutung nahe, dass doch was mit deienm PHP nicht stimmt.

    Einen Kommentar schreiben:

Lädt...
X