使用CodeIgniter上传ZIP文件?

时间:2009-09-13 10:19:29

标签: php codeigniter

我正在使用以下代码使用CodeIgniter上传和提取PHP中的ZIP存档。

    $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 个答案:

答案 0 :(得分:4)

$config['allowed_type']

应该是mime类型的列表,但恰好有时文件扩展名才会起作用(至少是图像的情况)。

尝试:

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

虽然这些也是zip的mime类型:

application/x-zip
application/x-zip-compressed
application/octet-stream
application/x-compress
application/x-compressed
multipart/x-zip

答案 1 :(得分:2)

我使用“kofic”提供的代码解决了它:http://ellislab.com/forums/viewthread/113029/

答案 2 :(得分:0)

您可以保留“允许类型”。作为&#39; zip&#39;,但要确保扩展被视为&#39; zip&#39;

的mime类型。

我更改了我的&#39; application / config / mimes.php&#39;的第54行。到:

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

(感谢Matthew Rapati提供的MIME类型列表)

事实是,一旦你允许“应用程序/八位字节流”,上传的文件几乎可以是任何东西,因此限制允许类型的部分目的就会消失。但是由于CI强迫你把它设置成某种东西,我认为它仍然比以下更好:

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

哪个也有效。