• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zip erstellt aber nicht gefunden

T4k3C4r3

Mitglied
Hallo html.de!!

Ich stehe wieder mal auf der Leitung.

Ich habe folgenden Code:
PHP:
    $post = $_FILES;        
    $file_folder = "uploads/";    // folder to load files
    if(extension_loaded('zip')){    // Checking ZIP extension is available
        if(isset($post['uploaded_files']) and count($post['uploaded_files']) > 0){    // Checking files are selected
            $zip = new ZipArchive();            // Load zip library    
            $zip_name = time().".zip";            // Zip name
            if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) {        // Opening zip file to load files
                $error =  "* Sorry ZIP creation failed at this time<br/>";
            } else {
                echo "zip erstellt<br />";
            }
            foreach($post['uploaded_files'] as $file){                
                $zip->addFile($file_folder.$file);            // Adding files into zip
                echo "Datei dabei!";
            }
            $zip->close();
            if(file_exists($zip_name)) {
                // push to download the zip
                header('Content-type: application/zip');
                header('Content-Disposition: attachment; filename="'.$zip_name.'"');
                readfile($zip_name);
                // remove zip file is exists in temp path
                unlink($zip_name);
            } else {
                $error = "zip existiert nicht <br />";
            }
        } else {
            $error = "Please select file to zip <br/>";
        }
    } else {
        $error = "You dont have ZIP extension<br/>";
    }

Wenn ich mehrere Datein uploade, dann passt FAST ALLES. Vorgang:

1) Ausgabe: zib erstellt.
2)Mehrfache Ausgabe: Datei dabei!

Dann wird was mich voll iritiert ausgegeben: Zip existiert nicht ???? ???
Wie kann das sein wenn sie vorher erstelllt?

Danke schonmal

Mfg
 
Werbung:
Gibt doch mal den absoluten Pfad zur zip-Datei an statt nur deren Dateinamen.

Außerdem solltest Du dir mal mit

PHP:
var_dump($zip);

den Inhalt der Klasse ausgeben lassen. Vlt. hat sie auch ein Problem.
 
Ausgabe mit var_dump();

PHP:
object(ZipArchive)#2 (5) {   ["status"]=>   int(5)   ["statusSys"]=>   int(2)   ["numFiles"]=>   int(5)   ["filename"]=>   string(50) "/var/www/web******/html/box/uploads/1354880698.zip"   ["comment"]=>   string(0) "" }

Wenn ich den Pfad von der Datei bis zum Ordner mit dem Namen des ZipFiles angeben erscheint der selbe Fehler.
Ich bin vverzweifelt.
 
Zuletzt bearbeitet:
Werbung:
Hi,
ich hab mich mal mit deinem Problem befasst und folgendes rausgefunden:

Wenn du bei addFile auch nur eine Datei hinzufuegen willst, die nicht existiert, dann schlaegt das erzeugen des Zip-Archivs ohne Fehlermeldung fehl.
Ich denke das wird bei dir der Fall sein!


PHP:
<?php 
$zip = new ZipArchive();
$zip_name = "test.zip";            // Zip name
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) {
    echo "zip nicht erstellt";
} else {

    $zip->addFile("uploads/bla.php");
    $zip->addFile("gibtsnicht.txt");  // wenn ich diese Zeile weglasse wird das Archiv erzeugt und das Programm gibt "exists" aus. 
                                               // Versuche ich jetzt die (nicht existente) Datei hinzuzufuegen, wird das Archiv nicht erstellt ohnen Fehlermeldung
    var_dump($zip);
}

var_dump($zip->close());

if(file_exists($zip_name)) {
    echo "exists";
}
?>

Daher empfehle ich mal erst zu Testen, ob die Datei die du hinzufuegen willst existiert.

if(file_exists($file_folder.$file) {
// add file to zip
}

Siehe auch Kommentar bei PHP: ZipArchive::addFile - Manual
 
Also ich hab überprüft und es funktioniert, d.h. er findet das File. Was mir auf fällt ist aber wenn ich 2 DAtein uploade, dann gibt er 5 mal "Datei dabei" aus. Merkwürdig...
 
Hast du die Dateinamen wirklich mit file_exists ueberprueft, ob sie existieren?
Was gibt var_dump($post) aus?
Eventuell schlaegt das erstellen des Archivs auch fehl, wenn man probiert 2 mal die gleiche Datei zum Archiv hinzuzufuegen.
 
Werbung:
Ausserdem kapier ich glaub ich nicht was du machen willlst. Wieso benutzt du $_FILES?

Willst du Dateien hochladen, und diese gezippt wieder runterladen, oder willst du spezifizieren, welche Dateien im Ordner uploads gezippt und zum runterladen angeboten werden sollen?
 
Sry bitte wieder vergessen! Ich hab zwar alles in die Datei eingetragen aber es wurde nicht auf den Server raufgeladen.

var_dump($_FILES) gibt aus:
PHP:
array(1) {   ["uploaded_files"]=>   array(5) {     ["name"]=>     array(1) {       [0]=>       string(12) "berichte.htm"     }     ["type"]=>     array(1) {       [0]=>       string(9) "text/html"     }     ["tmp_name"]=>     array(1) {       [0]=>       string(35) "/var/www/web*****3/phptmp/phpLI97TY"     }     ["error"]=>     array(1) {       [0]=>       int(0)     }     ["size"]=>     array(1) {       [0]=>       int(2256)     }   } }

Und er kann tatsächlich keiner der Datein Finden.

Hier das Upload formular:

HTML:
<?php
    include 'upload.php';
?>
<script type="text/javascript">
    $(document).ready(function(){
        $('.add_field').click(function(){
            var input = $('#input_clone');
            var clone = input.clone(true);
            clone.removeAttr ('id');
            clone.val('');
            clone.appendTo('.input_holder'); 
        });
        $('.remove_field').click(function(){
            if($('.input_holder input:last-child').attr('id') != 'input_clone'){
                $('.input_holder input:last-child').remove();
            }
        });
    });
</script>
<div style="text-align:center;background-color:#aacfe4;width:100%;min-height:200px;">
<br /><br />
<span class="add_field"><input type="submit" class="button green" value="" /></span>
<span class="remove_field"><input type="submit" class="button red" value="" /></span>
<br /><br /><br />
<form action="?do=addfile" method="POST" enctype="multipart/form-data">
    <div class="input_holder">
        <input type="file" name="uploaded_files[]" id="input_clone" />
    </div><br />
    <input type="submit" class="button blue" value="" />
    <br /><br />
</form>
</div>
 
Ausserdem kapier ich glaub ich nicht was du machen willlst. Wieso benutzt du $_FILES?

Willst du Dateien hochladen, und diese gezippt wieder runterladen, oder willst du spezifizieren, welche Dateien im Ordner uploads gezippt und zum runterladen angeboten werden sollen?

Ich kann Datein hinaufladen mit der Form den Link anderen schicken und diese Files können dann als ZIP !! heruntergeladen werden
 
Werbung:
Also zum einen.. mit welchem link? ;)

Zum anderen. Nach dem upload musst du die Dateien schon noch in den Ordner uploads verschieben!

Fuer multiple File Uploads verwende ich immer eindeutige Bezeichner wie file1, file2 ... usw.
Die musst du nach dem hochladen dann alle in den Ordner uploads verschieben.
Es ist wohl aber auch Moeglich das als Array zu machen.

Ich empfehle folgenden Seiten mal durchzulesen:

PHP: move_uploaded_file - Manual und PHP: Uploading multiple files - Manual

Und mach die mal mit dem Aufbau des $_FILE arrays vertraut. Du kannst nicht einfach foreach($_FILES) schreiben, um den Dateinamen zu finden.
 
Danke ich habs geschafft!! Hab alle Datein vorm zippen in einen ordner gegeben und dann verzippt. Willst/Wollt ihr den Code sehn?
 
Werbung:
Nja, wenn du anderen den Link schicken willst, dann darfst du sie natuerlich nicht entfernen....
Wie sollen sie denn dann die .zip Datei runterladen ;)
 
Werbung:
Hier der Code:
PHP:
<?php
if(isset($_FILES['uploaded_files'])) {
    $folder_new = "uploads/waitingFiles/";
    $folder = 'uploads/';
    if(extension_loaded('zip')){
        if(isset($_FILES['uploaded_files']) and count($_FILES['uploaded_files']) > 0) {
            $zip = new ZipArchive();
            $zip_name = time().".zip";
            if($zip->open($folder.$zip_name, ZIPARCHIVE::CREATE)!== TRUE) {
                //Fehler
            }
            foreach($_FILES['uploaded_files']['name'] as $key => $value) {
                if(is_uploaded_file($_FILES['uploaded_files']['tmp_name'][$key]) &&    $_FILES['uploaded_files']['error'][$key] == 0) {
                    if(move_uploaded_file($_FILES['uploaded_files']['tmp_name'][$key], $folder_new.$value)) {
                        if(file_exists($folder_new.$value)) {
                            $zip->addFile($folder_new.$value, $value);
                        }
                    } else {
                        //Fehler
                    }
                    
                } else {
                    //Fehler
                }
            }
            $zip->close();
            //Eintragen in die Datenbank.
            //unlink($folder.$zip_name);
        } else {
            //Fehler
        }
    } else {
        //Fehler
    }
}
?>
 
Ist der Code bzw das Kommentar zum eintragen in die Datenbank an einer geeigneten stelle ?
Oder sollte das vor zip close passieren ?
 
http://www.php.net Ist dein Freund, wenn du nicht weist, was in deinem Skript passiert ;).
Ich weis nicht wo du den Code her hast, aber besser ist prinzipiell immer, wenn du weist, was in deinem Skript passiert.
 
Werbung:
Ich hab ihn kopiert und dann eig weils nicht funktioniert hat komplett umgeschrieben... Danke ich werd mal bisschen googlen :D
 
Zurück
Oben