【问题标题】:Upload ZIP-files with CodeIgniter?使用 CodeIgniter 上传 ZIP 文件?
【发布时间】:2010-11-27 21:24:36
【问题描述】:

我正在使用以下代码使用 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 文件。 (它的大小不超过允许的最大值)

这个问题也出现在我尝试过的每个不是图像的文件类型中。

有什么建议吗? 干杯!

【问题讨论】:

  • 当然:0x3A28213A、0x6339392C、0x7363682E。 xkcd.com/138
  • 这确实很有趣,但并没有解决问题:)
  • 这就是为什么它是评论而不是答案:)

标签: php codeigniter


【解决方案1】:
$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

【讨论】:

  • 更具体地说,可以在 $config['allowed_type'] 上工作的唯一扩展是 gif、jpg、jpeg、png 和 jpe。至于 CodeIgniter 期望你在$config['allowed_type'] 中输入什么,你可以查看system/application/config/mimes.php
  • 好的,我这样设置变量: $config['allowed_types'] = 'application/zip|application/x-zip|application/x-zip-compressed|application/octet-stream|应用程序/x-压缩|应用程序/x-压缩|多部分/x-zip';我收到:“不允许您尝试上传的文件类型。”
【解决方案2】:

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

【讨论】:

  • 如果您能在此处提供解决方案而不是链接,那就太好了。我无法打开链接。
【解决方案3】:

您可以将“allowed_types”保留为“zip”,但请确保扩展被视为“zip”的 mime 类型。

我将“application/config/mimes.php”的第 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'] = '*';

这也有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2013-12-16
    • 2015-06-10
    相关资源
    最近更新 更多