I am getting the error: The filetype you are attempting to upload is not allowed when I try to uplaod any file.
if(!empty($_FILES['proof_of_purchase']['name'])) {
$config['upload_path'] = './uploads/invoices/';
$config['allowed_types'] = 'gif|jpg|jpeg|png|pdf|bmp';
$config['max_size'] = '3000';
$this->load->library('upload', $config);
// if there was an error, return and display it
if (!$this->upload->do_upload('proof_of_purchase'))
{
$data['error'] = $this->upload->display_errors();
$data['include'] = 'pages/classic-register';
} else {
$data['upload_data'] = $this->upload->data();
$filename = $data['upload_data']['file_name'];
}
}
I have tried many different files- mostly gif & jpeg and get the same error each time.
var_dump($_FILES); gives me:
array(1) { ["proof_of_purchase"]=> array(5) { ["name"]=> string(28) "2010-12-04_00019.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(19) "D:\temp\php2BAE.tmp" ["error"]=> int(0) ["size"]=> int(58054) } }
I have checked the mime config and it contains the right stuff. Example:
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
I've spent far too long on this and it's driving me nuts! Any ideas would be extremely helpful.
This problem is caused by not having the PHP FileInfo extension. The function the upload class uses is part of that extension.
http://www.php.net/manual/en/ref.fileinfo.php
I had the same issue. You may need to check if the application recognizes the mimetype of the file that is being uploaded. Adding a new mimetype to config/mimes.php fixed the issue. :-)
It's probably worth checking that you have the latest version of the application/config/mimes.php as instead of setting a variable $mimes it now simply returns an array.
new mimes.php
return array
old mimes.php
$mimes = array
If you still have the old version of mimes.php the Common.php function &get_mimes() returns an empty array. This has the knockon effect of breaking Upload.php
Once I traced this, all was working fine :)
The solution is replace the Upload.php in the system/libraries/ by Upload.php of CodeIgniter v2.0.3
If you don't want to change system files. Just try this:
Open
system/libraries/Upload.php
(methoddo_upload()
line 205) and do thisTry to upload some file.
Add file type, which you see in
var_dump()
toapplication/config/mimes.php
.Little example: you have problem with
.docx
. Try to add:To
application/config/mimes.php
.I've had these same problems with CI and haven't been able to find a fix on the forums or via google. What I've done is to allow all filetypes, so that the file gets uploaded. Then, I handle the logic manually to determine whether to allow/keep the file, or delete it and tell the user that filetype is not allowed.
EDIT - This is assuming you're using CI 2 (in CI 1 you can follow the tutorial here to allow all filetypes: http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/)