2012-03-30 10 views
3

Ich habe eine Funktion, die hochgeladene Dateien (WORDPRESS) nimmt und sie zu einer (neu erstellten) ZIP-Datei hinzufügt. Jede neue Datei wird zur Zip-Datei hinzugefügt (falls noch nicht erstellt - die erste Datei erstellt eine) und auch zu einem Kommentar mit der Liste der Dateien.PHP dynamische ZIP-Datei Erstellung stürzt mit Nicht-Bild-Dateitypen ab. (wp)

function Ob99_generate_zip_file($meta) { 
    // we always need post_id , right ? 
    if(isset($_GET['post_id'])) { 
      $post_id = $_GET['post_id']; 
     } elseif(isset($_POST['post_id'])) { 
      $post_id = $_POST['post_id']; 
     } 
     //setting some more variables. 
     $file = wp_upload_dir();// take array 
     $file2 = wp_upload_dir();//debug 
     $zipname = $file['path'].'file.zip'; // set zip file name 
     $file = trailingslashit($file['basedir']).$meta['file'];// construct real path 

      // Without this next condition the function dies. WHY ?? 
     list($orig_w, $orig_h, $orig_type) = @getimagesize($file); // not help to comment 
     if (!$orig_type == IMAGETYPE_GIF || !$orig_type == IMAGETYPE_PNG|| !$orig_type == IMAGETYPE_JPEG) { 
     //why other filetypes not working ?? 
     return ; 
     } 

    $zip = new ZipArchive; // initiatte class 
    $zip->open($zipname , ZipArchive::CREATE); // open buffer 
    $new_filename = substr($file,strrpos($file,'/') + 1); //we do not need nested folders 
    $zip->addFile($file,$sitename.'/'.$new_filename); // we add the file to the zip 
    if (file_exists($zipname)){ 
    $comment = $zip->getArchiveComment(); // if the file already exist read the comment 
    } 
    else { // if not - let´s give it a cool retro header 
    $comment_head = '*********************************'. PHP_EOL ; 
    $comment_head .= '****** <<< FILE CONTENT >>> *****'. PHP_EOL ; 
    $comment_head .= '*********************************'. PHP_EOL ; 

    } 
    $comment = $comment_head . $comment ;// add header before comment 
    $comment = $comment . PHP_EOL . PHP_EOL . $meta['file'] ; // add new file name 
    $zip->setArchiveComment($comment); // and comment 
    $zip->addFromString('filelist.txt', $comment); // create txt file with the same list 
    $zip->close()or die('can not create zip file'.$file.print_r($meta).'---- DEBUG SEPERATOR ---- '.print_r($file2)); // FINISHED or DIE with debug 
    } 

Mein Problem: Wenn ich versuche, eine andere Datei als ein Bild hochzuladen - wird die Funktion DIE. Ich habe eine Bedingung für die Überprüfung des Imagetyps hinzugefügt - aber ich würde gerne wissen, warum es abstürzt und wie es ohne diese Bedingung funktioniert ... Hat die Zip-Funktion irgendwelche Probleme mit PDF, doc oder another? ist das ein Wordpress-Problem?

Antwort

0

Der Problemabschnitt scheint zu sein, wo Sie PDFs, etc. ihre Bildgröße bitten. Warum versuchst du es nicht:

$image_size = getimagesize($file); 

if($image_size===false) 
{ 
    // This is not an image 
    // Do what you want to PDFs, etc. 
} 
else 
{ 
    // This is an image 
    // Find out image type, dimensions, etc. 
} 
+0

danke - Ich habe die Frage Post korrigiert - aber irgendwie - die Kommentare wurden nur für diesen Beitrag auf SE gemacht. Sie sind nicht im ursprünglichen Code. –

+0

Danke, dass Sie sich die Zeit genommen haben, es anzuschauen - aber ich denke, Sie haben das Problem falsch verstanden (vielleicht habe ich den Code nicht genug kommentiert). Der Teil, wo ich Bildergröße bekomme, wurde nur hinzugefügt, um Nichtbilddateien zu filtern. Wie ich in den Code-Kommentaren geschrieben habe. Ich brauche weder die Bildgröße noch den MIME-Typ - aber wenn ich das nicht tue, wird es beim Laden von PDF trotzdem sterben. Ich mache diese Bedingung, um nicht das ganze System zu brechen, wenn jemand PDF lädt (und es einfach ignoriert). aber es ist nicht das, was ich wirklich will. –

+0

Warum müssen Sie sogar Nicht-Bilddateien filtern? Wenn Sie alle hochgeladenen Dateien komprimieren möchten, warum fügen Sie diese Bedingung hinzu? – hohner