it-swarm.com.de

pHP Erstellen von ZIPs ohne Pfad zu den Dateien innerhalb der ZIP-Datei

Ich versuche, PHP zu verwenden, um eine Zip-Datei zu erstellen (was auf dieser Seite - http://davidwalsh.name/create-Zip-php gemacht wird), aber innerhalb der Zip-Datei befinden sich alle Ordnernamen in die Datei selbst. 

Ist es möglich, die Datei nur innerhalb der Zip abzuspeichern, ohne alle Ordner?

Hier ist mein Code:

function create_Zip($files = array(), $destination = '', $overwrite = true) {

    if(file_exists($destination) && !$overwrite) { return false; };
    $valid_files = array();
    if(is_array($files)) {
        foreach($files as $file) { 
            if(file_exists($file)) { 
                $valid_files[] = $file;
            };
        };
    };
    if(count($valid_files)) { 
        $Zip = new ZipArchive();
        if($Zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
            return false;
        };
        foreach($valid_files as $file) { 
            $Zip->addFile($file,$file);
        };
        $Zip->close();
        return file_exists($destination);
    } else {
        return false;
    };

};


$files_to_Zip = array('/media/138/file_01.jpg','/media/138/file_01.jpg','/media/138/file_01.jpg');

$result = create_Zip($files_to_Zip,'/...full_site_path.../downloads/138/138_files.Zip');
45
SoulieBaby

Das Problem hierbei ist, dass $Zip->addFile dieselben zwei Parameter übergeben wird.

Laut der Dokumentation :

bool ZipArchive ::datei hinzufügen (Schnur $ Dateiname [ string $ localname ])

Dateiname
Der Pfad zur hinzuzufügenden Datei.

Lokaler Name
Lokaler Name im Zip-Archiv.

Dies bedeutet, dass der erste Parameter der Pfad zur tatsächlichen Datei im Dateisystem ist und der zweite der Pfad und der Dateiname, den die Datei im Archiv haben wird.

Wenn Sie den zweiten Parameter angeben, müssen Sie den Pfad entfernen, wenn Sie ihn dem Zip-Archiv hinzufügen. Auf Unix-basierten Systemen würde dies beispielsweise so aussehen:

$new_filename = substr($file,strrpos($file,'/') + 1);
$Zip->addFile($file,$new_filename);
116
Nathan Osman

Ich denke, eine bessere Option wäre:

$Zip->addFile($file,basename($file));

Dadurch wird einfach der Dateiname aus dem Pfad extrahiert.

39
Carlos Évora

Dies ist nur eine andere Methode, die ich für mich gefunden habe

$zipname = 'file.Zip';
$Zip = new ZipArchive();
$tmp_file = tempnam('.','');
$Zip->open($tmp_file, ZipArchive::CREATE);
$download_file = file_get_contents($file);
$Zip->addFromString(basename($file),$download_file);
$Zip->close();
header('Content-disposition: attachment; filename='.$zipname);
header('Content-type: application/Zip');
readfile($tmp_file);
0