我正在使用以下代码使用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文件。 (它的大小不超过允许的最大值)
我尝试过的每种文件类型都会出现此问题,而不是图像。
任何指针? 干杯!
答案 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'] = '*';
哪个也有效。