Php создать zip-файл (из вложений в сообщения 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();

Оба метода ничего не вернули. Будем признательны за любую информацию.

ИЗМЕНИТЬ 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 - и это короткий ответ. См. Длинный ниже.)


person Obmerk Kronen    schedule 28.03.2012    source источник
comment
Нативной функции PHP с именем create_zip() не существует. Покажите код этой функции. Также, пожалуйста, покажите результат var_dump($files_to_zip)   -  person DaveRandom    schedule 28.03.2012
comment
См. мое редактирование для образца массива.   -  person Obmerk Kronen    schedule 28.03.2012


Ответы (1)


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

Я подтвердил свои собственные подозрения - 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.

person Obmerk Kronen    schedule 28.03.2012