Codeigniter - получить несколько файлов, переименовать их, а затем заархивировать - PullRequest
4 голосов
/ 07 января 2012

Я создаю веб-сайт с использованием codeigniter, который позволит пользователям загружать файлы, похожие на gmail. Под этим я подразумеваю, что пользователь может загрузить только 1 файл или все файлы в папке zip.

Поскольку файлов будет много, я закодировал их имена, чтобы избежать дублирования, и сохранил их исходные имена в базе данных, которая возвращает мне массив, подобный этому:

Array
(
    [0] => Array
        (
            [file_id] => 2
            [file_name] => v6_copy.pdf
            [file_path] => uploads/4/d5/67697ff58d09d3fb25d563bf85d3f1ac.pdf
        )

    [1] => Array
        (
            [file_id] => 3
            [file_name] => v4_copy.pdf
            [file_path] => uploads/7/cf/38212079635e93a8f8f4d4a3fc2a11ff.pdf
        )

)

Что мне нужно сделать, так это получить каждый файл, переименовать его в исходное имя и затем сжать его одним почтовым индексом. В настоящее время я пытаюсь использовать помощник по кодировке zip, но я могу ' Кажется, я не могу переименовать файлы.

foreach ($query->result() as $row) // This returns what you see above
{
    // I need to rename the file somewhere here
    $this->zip->read_file($row->filename); 
}

$this->zip->download('files_backup.zip');

Есть ли способ сделать это, не создавая вручную каталог, не копируя файлы, не переименовывая их, а затем архивируя файл?

Любая помощь наиболее ценится.

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Класс Zip CodeIgniter очевидно не предлагает никаких средств для переименования записей.Вы можете использовать собственное PHP-расширение Zip, которое позволяет изменять имя при добавлении файла в архив (а также позже).

Пример из Руководство по PHP

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->addFile('/path/to/index.txt', 'newname.txt');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
2 голосов
/ 07 января 2012

Благодаря ответу @Gordon я нашел решение.Он совершенно прав в том, что Codeigniter не может переименовать файл, но я нашел действительно быстрое изменение библиотеки, и она, кажется, работает.

Если вы идете в свою систему> librairies-> Zip.phpкак упомянуто @Gordon, поиск "read_file", и вы найдете функцию.

Затем я просто добавил аргумент к функции и затем изменил часть кода, см. Ниже:

function read_file($path, $preserve_filepath = FALSE, $name = NULL) // Added $name
{
    if ( ! file_exists($path))
    {
        return FALSE;
    }

    if (FALSE !== ($data = file_get_contents($path)))
    {
            if($name == NULL){  // Added a verification to see if it is set, if not set, then it does it's normal thing, if it is set, it uses the defined var.
        $name = str_replace("\\", "/", $path);

        if ($preserve_filepath === FALSE)
        {
            $name = preg_replace("|.*/(.+)|", "\\1", $name);
        }
            }

        $this->add_data($name, $data);
        return TRUE;
    }
    return FALSE;
}

Надеюсь, это поможет другим.Еще раз спасибо, Гордон

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