Php создать zip-файл (из post attachments wordpress)

Я пытаюсь создать zip-файл из почтовых вложений в wordpress.

Я пробовал оба метода ниже – но это ничего не дает (никаких сообщений об ошибках, никакого файла не создается) – Что я делаю неправильно (снова ..)

Я не думаю, что факт, что эти сообщения являются вложениями в wordpress, имеет к этому какое-то отношение – потому что эти методы также не работают с обычными файлами. Зачем ? -> См. Ответ.

$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(); 

а также этот метод:

 $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(); 

Оба метода ничего не вернули. Любые идеи будут оценены.

EDIT I – образец print_r для массива $ 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 ) 

… с помощью get_attached_file () он создаст реальный путь (в какой-то момент я подозревал, что, возможно, php не может создать zip через HTTP – и это короткий ответ. См. длинный ниже).

    Хорошо, я отвечу на свой вопрос здесь.

    Я подтвердил свои собственные подозрения – PHP не может создавать ZIP при передаче через HTTP, поэтому нам нужен PATH, а не URL …

    Так, например, в WordPress, нужно использовать get_attached_file () для создания реального пути.

     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 ) 

    (Спасибо @DaveRandom за его комментарий о просмотре массива var_dump – я действительно смотрел на него много раз, но пока кто-то специально не спросил его, я не обращал много внимания.)

    Затем это заставило меня вспомнить еще одну проблему, с которой я давно сталкивался с gdlib – о функциях потока PHP, создании файлов – и HTTP. Например, библиотеки изображений, такие как gdlib или динамическое создание PDF, все они не работают по протоколу HTTP.