用CodeIgniter上传ZIP文件?

问题描述:

我正在使用下面的代码在PHP中使用CodeIgniter上传和提取ZIP压缩文件。用CodeIgniter上传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文件。 (它的大小不超过允许的最大值)

这个问题也发生在我试过的每个文件类型都不是图像。

任何指针? 干杯!

+7

当然:0x3A28213A,0x6339392C,0x7363682E。 http://xkcd.com/138/ – soulmerge 2009-09-13 10:45:58

+1

这实际上很有趣,但没有解决问题:) – Christoffer 2009-09-13 11:53:11

+3

这就是为什么它是一个评论,而不是一个答案:) – soulmerge 2009-09-13 16:31:03

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

+0

如果你能在这里提供解决方案而不是链接,那将是非常好的。我无法打开链接。 – 2016-03-11 06:53:43

$config['allowed_type'] 

应该是一个mime类型的列表,但它恰好会发生,有时候只是文件扩展名会起作用(至少在图像上是这种情况)。

尝试:

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

虽然这些也都是MIME类型ZIP:

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

更具体地说,唯一的扩展将工作'$ config ['allowed_type']'是gif,jpg,jpeg,png和jpe。至于CodeIgniter希望你放在'$ config ['allowed_type']'中,你可以看看'system/application/config/mimes.php'。 – jimyi 2009-09-13 17:37:52

+0

好吧,我设置这样的变量: $ config ['allowed_types'] ='application/zip | application/x-zip | application/x-zip-compressed | application/octet-stream | application/x-compress |应用程序/ x压缩|多部分/ X-拉链'; 而我收到:“您正试图上传的文件类型是不允许的。” – Christoffer 2009-09-14 06:09:54

你可以保持你的'allowed_types'作为'zip',但要确保你扩展被认为是'zip'的mime类型。

我改线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'), 

(感谢马修Rapati的MIME类型的列表)

事实是,一旦你允许'application/octet-stream',上传的文件几乎可以成为限制允许的类型消失的一部分。但是因为CI迫使你把它设置成某种东西,我认为它还是比它好:

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

这也有效。