php
  • ziparchive
  • php-zip-archive
  • 2016-08-29 4 views 0 likes 
    0

    Ich habe den folgenden Code nun schon seit geraumer Zeit läuft:PHP ZipArchive addFile aufgehört zu arbeiten

    $thisdir = "$_SERVER[DOCUMENT_ROOT]/webroot/uploads/user_uploaded_files/"; 
    
        if(!empty($files)){ 
    
        $destination = 'uploads/zip_files/meeting_' . $meetingId .'.zip'; 
    
        $zip = new ZipArchive(); 
    
        $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
    
        //Add all the uploaded files ($file = filename.ext) 
    
         foreach($files as $file){ 
    
          if(file_exists($thisdir . $file)){ 
    
           $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
    
         } 
    } 
    

    Aber es hatte gerade aufgehört vor kurzem arbeiten (nicht sicher von der vorherigen, aber aktuelle Version ist 7.0.9) .

    foreach Schleife läuft wie zuvor, file_exists gibt immer true zurück, aber keine Dateien werden dem Archiv hinzugefügt.

    Hat jemand das auch erlebt? Jede Hilfe oder Anleitung wird sehr geschätzt.

    +0

    Haben Sie die Dateiberechtigungen überprüft? –

    Antwort

    1

    Sie sollten wahrscheinlich testen, ob $ zip-> open gearbeitet:

    $res = $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
    if ($res) { 
        foreach ($files as $file) { 
         if (file_exists($thisdir . $file)) { 
          $zip->addFile('/uploads/user_uploaded_files/' . $file, $file); 
         } 
        } 
    } 
    

    Sie

    error_reporting(E_ALL); 
    ini_set('display_errors', true); 
    

    am Anfang des Skripts hinzufügen können, und sehen, ob es ein Fehler ist.

    0

    Habe gerade eine Lösung für dieses Problem gefunden und hoffe, dass es jemandem in der Zukunft helfen könnte.

    $files war ein Array von Strings, also Looping wie folgt: foreach($files as $file) Ich bekam immer eine einzige Zeichenfolge.

    Zumindest dachte ich, aber addFile() habe es anscheinend nicht als Zeichenfolge gelesen.

    Das Problem wurde gelöst, indem einfach jedes einzelne Element vor addFile() gegossen wurde. Die Lösung sieht folgendermaßen aus:

    foreach($files as $file){ 
    
        if(file_exists($thisdir . $file)){ 
    
         $file = (string)$file; 
    
         $zip->addFile('uploads/user_files/' . $file, $file); 
    
        } 
    
    } 
    
    +0

    Aus Neugier könnten Sie die Ausgabe von var_dump ($ files) posten; ? – vincenth

    Verwandte Themen