2012-03-28 8 views
5

Estoy tratando de crear un archivo zip a partir de archivos adjuntos en WordPress.Php create zip file (de los archivos adjuntos post a wordpress)

me han tratado ambos métodos abajo - pero resulta en nada (ningún mensaje de error, no hay ningún archivo creados) - ¿Qué estoy haciendo mal (de nuevo ..)

No creo que el hecho de que aquellos Los archivos adjuntos de WordPress tienen algo que ver con eso, porque esos métodos también fallaron con archivos normales. por qué ? -> Ver la respuesta.

$files_to_zip = array();// create files array 
    //run a query 
    $post_id = get_the_id(); 
    $args = array(
     'post_type' => 'attachment', 
     'numberposts' => null, 
     'post_status' => null, 
     'post_parent' => $post_id 
    ); 

    $attachments = get_posts($args); 
    if ($attachments) { 
foreach ($attachments as $attachment) { 
     $files_to_zip [] = wp_get_attachment_url($attachment->ID); // populate files array 
     } 
    } 
    print_r($files_to_zip); 
    $zip = new ZipArchive; 
    $zip->open('file.zip', ZipArchive::CREATE); 
    foreach ($files_to_zip as $file) { 
     $zip->addFile($file); 
    } 
    $zip->close(); 

y también este método:

$files_to_zip = array(); // create array 
//run a query 
$post_id = get_the_id(); 
$args = array(
    'post_type' => 'attachment', 
    'numberposts' => null, 
    'post_status' => null, 
    'post_parent' => $post_id 
); 
$zip = new ZipArchive; 
$zip->open('file.zip', ZipArchive::CREATE); 
$attachments = get_posts($args); 
if ($attachments) { 
    foreach ($attachments as $attachment) { 
    $zip->addFile(wp_get_attachment_url($attachment->ID)); 
    } 
} 

print_r($files_to_zip);// debug - return file names OK 

$zip->close(); 

Ambos métodos devuelto nada .. será apreciado Cualquier ideas.

EDIT - print_r muestra para array $ files_to_zip

print_r($files_to_zip); 

Array ( 
[0] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-62316IMAG0659.jpg 
[2] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IGP0255.jpg 
[3] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IZTP0635.jpg 
[4] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_ITG035t5.jpg 
[5] => http://localhost/testing_evn/wp-content/uploads/2012/03/wrt-85520_IRTT7375.jpg) 

.by usando get_attached_file() que producirá verdadera ruta (en algún momento sospeché que tal vez php no puede crear más de postal HTTP -. y esa es la respuesta corta Ver el largo abajo)

+1

No existe una función PHP nativa llamada 'create_zip()' - por favor, muestre el código para esta función. Además, muestre el resultado de 'var_dump ($ files_to_zip)' – DaveRandom

+0

Vea mi edición para una matriz de muestra. –

Respuesta

4

Ok -. voy a responder a mi propia pregunta aquí ..

he confirmado mi propia Do spicions - PHP no puede crear postal cuando pasa a través de HTTP - por lo que necesitamos un camino y no una URL ...

Así, por ejemplo, en el caso de Wordpress, necesita utilizar get_attached_file() para producir camino real ..

Array ( 
[0] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-62316IMAG0659.jpg 
[2] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IGP0255.jpg 
[3] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IZTP0635.jpg 
[4] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_ITG035t5.jpg 
[5] => C:\Documents and Settings\OB\htdocs\test_env\wp-content\uploads\2012\03\wrt-85520_IRTT7375.jpg) 

(Gracias @DaveRandom por su comentario acerca de ver la matriz var_dump -I realidad había mirado muchas veces, pero hasta que alguien le preguntó específicamente para ver que no le presté mucha atención.)

Entonces me hizo Recuerdo otro problema que tuve hace mucho tiempo con gdlib - sobre las funciones de flujo de PHP, la creación de archivos - y HTTP. Por ejemplo, las bibliotecas de imágenes como gdlib o la creación dinámica en pdf fracasan en HTTP.

Cuestiones relacionadas