Загрузить ZIP-файлы с помощью CodeIgniter? - PullRequest
1 голос
/ 13 сентября 2009

Я использую следующий код для загрузки и извлечения ZIP-архива в PHP с использованием CodeIgniter.

    $config['upload_path'] = 'backups/';
    $config['allowed_types'] = 'zip';
    $config['file_name'] = $project_id;

    $this->load->library('upload', $config);

    if ( file_exists('backups/' . $project_id . '.zip') ) {
        try {
            delete_file('backups/' . $project_id . '.zip');
        } catch (exception $e) {
            // do nothing...
        }
    }

    if ( $this->upload->do_upload('zip_archive') ) {
        $upload_data = $this->upload->data();

        $file_name = 'backups/'.$upload_data['file_name'];

        $this->sync_model->extract_zip_archive($project_id, $file_name, TRUE);

        echo "Success";
    } else {
        echo $this->upload->display_errors('<p>','</p>');
    }

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

Эта проблема также возникает с каждым типом файла, который я пробовал, но не с изображением.

Есть указатели? Ура!

Ответы [ 3 ]

4 голосов
/ 13 сентября 2009
$config['allowed_type']

Должен быть список типов пантомимы, но бывает так, что иногда будет работать только расширение файла (по крайней мере, это касается изображений).

Попробуйте:

$config['allowed_type'] = 'application/zip';

Хотя это также типы пантомимы для почтового индекса:

application/x-zip
application/x-zip-compressed
application/octet-stream
application/x-compress
application/x-compressed
multipart/x-zip
2 голосов
/ 14 сентября 2009

Я решил это, используя код, предоставленный "kofic" здесь: http://ellislab.com/forums/viewthread/113029/

0 голосов
/ 08 сентября 2014

Вы можете оставить свои «allow_types» как «zip», но убедитесь, что вы расширяете типы mime, которые считаются «zip».

Я изменил строку 54 моего 'application / config / mimes.php' на:

'zip'   =>  array(
    'application/x-zip', 
    'application/zip', 
    'application/x-zip-compressed', 
    'application/octet-stream', 
    'application/x-compress', 
    'application/x-compressed', 
    'multipart/x-zip'), 

(Благодарим Мэтью Рапати за список типов MIME)

Правда в том, что после того, как вы разрешите 'application / octet-stream', загруженный файл может быть почти чем угодно, поэтому часть ограничения ограниченных разрешенных типов исчезает. Но так как CI заставляет вас устанавливать это на что-то, я думаю, что это все же лучше, чем:

$config['allowed_types'] = '*';

Что тоже работает.

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