Подготовка заказной загрузки - PullRequest
2 голосов
/ 27 января 2011

Я хотел бы создать форму, которая позволит настраивать сборку загрузки, как на странице jQuery UI . Пользователь выбирает компоненты, в которых он / она нуждается, и пользовательская загрузка собирается, (g) архивируется и отправляется. Как это работает? Как мне написать нечто подобное?

Дополнительно: поскольку я хотел бы реализовать это на сайте Drupal 7, также приветствуются предложения по полезным модулям.

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Простая реализация:

<?php
    // base directory containing files that we're adding
    $dir = 'images/';

    // name of our zip file. best to use a unique name here
    $zipfile = "test.zip";

    // get a directory listing, remove self/parent directories, and reindex array
    $files = array_values(array_diff(scandir($dir), array('.', '..')));

    // form has been submitted
    if (isset($_POST['submit'])) {
        // initialize the zip file
        $output = new ZipArchive();
        $output->open($zipfile, ZIPARCHIVE::CREATE);
        // add files to archive
        foreach ($_POST['file'] as $num=>$file) {
            // make sure the files are valid
            if (is_file($dir . $file) && is_readable($dir . $file)) {
                // add it to our zip file
                $output->addFile($dir . $file);
            }
        }
        // write zip file to filesystem
        $output->close();
        // direct user's browser to the zip file
        header("Location: " . $zipfile);
        exit();
    } else {
        // display filenames with checkboxes
        echo '<form method="POST">' . PHP_EOL;
        for ($x=0; $x<count($files); $x++) {
            echo '  <input type="checkbox" name="file[' . $x . ']" value="' . $files[$x] . '">' . $files[$x] . '<br>' . PHP_EOL;
        }
        echo '  <input type="submit" name="submit" value="Submit">' . PHP_EOL;
        echo '</form>' . PHP_EOL;
    }
?>

Известная ошибка: не проверяет, существует ли $zipfile заранее. Если это так, он будет добавлен к.

2 голосов
/ 27 января 2011

jnpcl ответ работает. Однако, если вы хотите загрузить файл без перенаправления, просто сделайте следующее:

// Once you created your zip file as say $zipFile, you can output it directly
// like the following
header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename='.basename($zipFile));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($zipFile));
ob_clean();
flush();
readfile($zipFile);

http://php.net/manual/en/function.readfile.php

1 голос
/ 27 января 2011

Я ничего не знаю об этом drupal, но, вероятно, это какой-то редактор справки для php или аналогичный ... однако это может помочь вам ... PHP ZIP

никогда не использовал его, ноне швы!

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...