CodeIgniter:不允许您尝试上传的文件类型。 isset($this->_mimes[$ext]) 总是空的

CodeIgniter: The filetype you are attempting to upload is not allowed. isset($this->_mimes[$ext]) is always null

我已经为这个问题花了几个小时,但我不知道如何解决它。我在尝试上传图片时收到一条错误消息。错误信息是 "The filetype you are attempting to upload is not allowed." 但我不认为文件类型导致了这个问题。我发现 ! $this->upload->do_upload('image') 总是错误的。我发现这是因为 $this->_mimes[$ext])(在 "system/libraries/Upload.php" 文件中。)总是给我带来 NULL。

当我测试我的功能时,我尝试 var_dump($this->file_type); 并得到 "image/jpeg"。

我也试过 var_dump($ext); 得到了 "jpg"。

这是 Image.php 文件的一部分。

<?php echo form_open_multipart('/image/index');?>
  <fieldset>
    <legend>Upload Image</legend>
    <div><label>File: </label><input id="image" type="file" name="image" /></div>
    <div><label>Title: </label><input id="title" type="text" name="title" /></div>
    <div class="error">
      <?php echo $error; ?>
    </div>
  </fieldset>

  <div class="form_line"><input id="image_submit" type="submit" value="Upload Picture" class="submit" /></div>
</form>

这是 Picture.php 文件的一部分。

function index()
{
  $config['upload_path']          ='./uploads/';
  $config['allowed_types']        = 'gif|jpg|png|jpeg';
  $config['max_size']             = 40960000;
  $config['max_width']            = 0;
  $config['max_height']           = 0;

  $this->load->library('upload', $config);

  if ( ! $this->upload->do_upload('image'))
    {
      $page_data = array('files' => $file_send, 'error' => $this->upload->display_errors());
      $this->load->view('media/image_upload', $page_data);
    }
  else {...}
}

这是我找到空值的地方。这是 CodeIgniter 代码。

public function is_allowed_filetype($ignore_mime = FALSE)
{
    if ($this->allowed_types === '*')
    {
        return TRUE;
    }

    if (empty($this->allowed_types) OR ! is_array($this->allowed_types))
    {
        $this->set_error('upload_no_file_types', 'debug');
        return FALSE;
    }

    $ext = strtolower(ltrim($this->file_ext, '.'));

    if ( ! in_array($ext, $this->allowed_types, TRUE))
    {
        return FALSE;
    }

    // Images get some additional checks
    if (in_array($ext, array('gif', 'jpg', 'jpeg', 'jpe', 'png'), TRUE) && @getimagesize($this->file_temp) === FALSE)
    {
        return FALSE;
    }

    if ($ignore_mime === TRUE)
    {
        return TRUE;
    }

    // isset($this->_mimes[$ext]) is always null
    if (isset($this->_mimes[$ext]))
    {
        return is_array($this->_mimes[$ext])
            ? in_array($this->file_type, $this->_mimes[$ext], TRUE)
            : ($this->_mimes[$ext] === $this->file_type);
    }

    return FALSE;
}

如果您对这个问题有任何建议,我将不胜感激。

如果有什么不清楚的地方,我很抱歉。如果您需要更多代码,我一定会提供。

编辑

我正在添加mimes.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types.  It is used by the
| Upload class to help identify allowed file types.
|
*/

$mimes = array( 'hqx' => 'application/mac-binhex40',
    'cpt' => 'application/mac-compactpro',
    'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
    'bin' => 'application/macbinary',
    'dms' => 'application/octet-stream',
    'lha' => 'application/octet-stream',
    'lzh' => 'application/octet-stream',
    'exe' => 'application/octet-stream',
    'class' => 'application/octet-stream',
    'psd' => 'application/x-photoshop',
    'so' => 'application/octet-stream',
    'sea' => 'application/octet-stream',
    'dll' => 'application/octet-stream',
    'oda' => 'application/oda',
    'pdf' => array('application/pdf', 'application/x-download'),
    'ai' => 'application/postscript',
    'eps' => 'application/postscript',
    'ps' => 'application/postscript',
    'smi' => 'application/smil',
    'smil' => 'application/smil',
    'mif' => 'application/vnd.mif',
    'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
    'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
    'wbxml' => 'application/wbxml',
    'wmlc' => 'application/wmlc',
    'dcr' => 'application/x-director',
    'dir' => 'application/x-director',
    'dxr' => 'application/x-director',
    'dvi' => 'application/x-dvi',
    'gtar' => 'application/x-gtar',
    'gz' => 'application/x-gzip',
    'php' => 'application/x-httpd-php',
    'php4' => 'application/x-httpd-php',
    'php3' => 'application/x-httpd-php',
    'phtml' => 'application/x-httpd-php',
    'phps' => 'application/x-httpd-php-source',
    'js' => 'application/x-javascript',
    'swf' => 'application/x-shockwave-flash',
    'sit' => 'application/x-stuffit',
    'tar' => 'application/x-tar',
    'tgz' => 'application/x-tar',
    'xhtml' => 'application/xhtml+xml',
    'xht' => 'application/xhtml+xml',
    'zip' =>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
    'mid' => 'audio/midi',
    'midi' => 'audio/midi',
    'mpga' => 'audio/mpeg',
    'mp2' => 'audio/mpeg',
    'mp3' => array('audio/mpeg', 'audio/mpg'),
    'aif' => 'audio/x-aiff',
    'aiff' => 'audio/x-aiff',
    'aifc' => 'audio/x-aiff',
    'ram' => 'audio/x-pn-realaudio',
    'rm' => 'audio/x-pn-realaudio',
    'rpm' => 'audio/x-pn-realaudio-plugin',
    'ra' => 'audio/x-realaudio',
    'rv' => 'video/vnd.rn-realvideo',
    'wav' => 'audio/x-wav',
    'bmp' => 'image/bmp',
    'gif' => 'image/gif',
    'jpeg' => array('image/jpeg', 'image/pjpeg'),
    'jpg' => array('image/jpeg', 'image/pjpeg'),
    'jpe' => array('image/jpeg', 'image/pjpeg'),
    'png' => array('image/png',  'image/x-png'),
    'tiff' => 'image/tiff',
    'tif' => 'image/tiff',
    'css' => 'text/css',
    'html' => 'text/html',
    'htm' => 'text/html',
    'shtml' => 'text/html',
    'txt' => 'text/plain',
    'text' => 'text/plain',
    'log' => array('text/plain', 'text/x-log'),
    'rtx' => 'text/richtext',
    'rtf' => 'text/rtf',
    'xml' => 'text/xml',
    'xsl' => 'text/xml',
    'mpeg' => 'video/mpeg',
    'mpg' => 'video/mpeg',
    'mpe' => 'video/mpeg',
    'qt' => 'video/quicktime',
    'mov' => 'video/quicktime',
    'avi' => 'video/x-msvideo',
    'movie' => 'video/x-sgi-movie',
    'doc' => 'application/msword',
    'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'word' => array('application/msword', 'application/octet-stream'),
    'xl' => 'application/excel',
    'eml' => 'message/rfc822'
   );


/* End of file mimes.php */
/* Location: ./system/application/config/mimes.php */

我想通了。这是因为 mimes.php 文件。以前,CodeIgniter 提供 mimes.php 这种格式。 $mimes = array( 'hqx' => 'application/mac-binhex40',...。但是,当前的 CodeIgniter 将格式更改为 return array( 'hqx' => array('application/mac-binhex40', ...。当我更新框架时,我没有更新 mimes.php 文件。非常感谢 Alex 给我提示!

修改后的mimes.php.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types.  It is used by the
| Upload class to help identify allowed file types.
|
*/
return array(
 'hqx' => array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),
 'cpt' => 'application/mac-compactpro',
 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'),
 'bin' => array('application/macbinary', 'application/mac-binary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'),
 'dms' => 'application/octet-stream',
 'lha' => 'application/octet-stream',
 'lzh' => 'application/octet-stream',
 'exe' => array('application/octet-stream', 'application/x-msdownload'),
 'class' => 'application/octet-stream',
 'psd' => array('application/x-photoshop', 'image/vnd.adobe.photoshop'),
 'so' => 'application/octet-stream',
 'sea' => 'application/octet-stream',
 'dll' => 'application/octet-stream',
 'oda' => 'application/oda',
 'pdf' => array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'),
 'ai' => array('application/pdf', 'application/postscript'),
 'eps' => 'application/postscript',
 'ps' => 'application/postscript',
 'smi' => 'application/smil',
 'smil' => 'application/smil',
 'mif' => 'application/vnd.mif',
 'xls' => array('application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'application/x-ms-excel', 'application/x-excel', 'application/x-dos_ms_excel', 'application/xls', 'application/x-xls', 'application/excel', 'application/download', 'application/vnd.ms-office', 'application/msword'),
 'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'),
 'pptx' =>  array('application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/x-zip', 'application/zip'),
 'wbxml' => 'application/wbxml',
 'wmlc' => 'application/wmlc',
 'dcr' => 'application/x-director',
 'dir' => 'application/x-director',
 'dxr' => 'application/x-director',
 'dvi' => 'application/x-dvi',
 'gtar' => 'application/x-gtar',
 'gz' => 'application/x-gzip',
 'gzip'  => 'application/x-gzip',
 'php' => array('application/x-httpd-php', 'application/php', 'application/x-php', 'text/php', 'text/x-php', 'application/x-httpd-php-source'),
 'php4' => 'application/x-httpd-php',
 'php3' => 'application/x-httpd-php',
 'phtml' => 'application/x-httpd-php',
 'phps' => 'application/x-httpd-php-source',
 'js' => array('application/x-javascript', 'text/plain'),
 'swf' => 'application/x-shockwave-flash',
 'sit' => 'application/x-stuffit',
 'tar' => 'application/x-tar',
 'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
 'z' => 'application/x-compress',
 'xhtml' => 'application/xhtml+xml',
 'xht' => 'application/xhtml+xml',
 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'),
 'rar' => array('application/x-rar', 'application/rar', 'application/x-rar-compressed'),
 'mid' => 'audio/midi',
 'midi' => 'audio/midi',
 'mpga' => 'audio/mpeg',
 'mp2' => 'audio/mpeg',
 'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
 'aif' => array('audio/x-aiff', 'audio/aiff'),
 'aiff' => array('audio/x-aiff', 'audio/aiff'),
 'aifc' => 'audio/x-aiff',
 'ram' => 'audio/x-pn-realaudio',
 'rm' => 'audio/x-pn-realaudio',
 'rpm' => 'audio/x-pn-realaudio-plugin',
 'ra' => 'audio/x-realaudio',
 'rv' => 'video/vnd.rn-realvideo',
 'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'),
 'bmp' => array('image/bmp', 'image/x-bmp', 'image/x-bitmap', 'image/x-xbitmap', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/ms-bmp', 'image/x-ms-bmp', 'application/bmp', 'application/x-bmp', 'application/x-win-bitmap'),
 'gif' => 'image/gif',
 'jpeg' => array('image/jpeg', 'image/pjpeg'),
 'jpg' => array('image/jpeg', 'image/pjpeg'),
 'jpe' => array('image/jpeg', 'image/pjpeg'),
 'jp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'j2k' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'jpf' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'jpg2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'jpx' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'jpm' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'mj2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'mjp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
 'png' => array('image/png',  'image/x-png'),
 'tiff' => 'image/tiff',
 'tif' => 'image/tiff',
 'css' => array('text/css', 'text/plain'),
 'html' => array('text/html', 'text/plain'),
 'htm' => array('text/html', 'text/plain'),
 'shtml' => array('text/html', 'text/plain'),
 'txt' => 'text/plain',
 'text' => 'text/plain',
 'log' => array('text/plain', 'text/x-log'),
 'rtx' => 'text/richtext',
 'rtf' => 'text/rtf',
 'xml' => array('application/xml', 'text/xml', 'text/plain'),
 'xsl' => array('application/xml', 'text/xsl', 'text/xml'),
 'mpeg' => 'video/mpeg',
 'mpg' => 'video/mpeg',
 'mpe' => 'video/mpeg',
 'qt' => 'video/quicktime',
 'mov' => 'video/quicktime',
 'avi' => array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'),
 'movie' => 'video/x-sgi-movie',
 'doc' => array('application/msword', 'application/vnd.ms-office'),
 'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'),
 'dot' => array('application/msword', 'application/vnd.ms-office'),
 'dotx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'),
 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'),
 'word' => array('application/msword', 'application/octet-stream'),
 'xl' => 'application/excel',
 'eml' => 'message/rfc822',
 'json'  => array('application/json', 'text/json'),
 'pem'   => array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'),
 'p10'   => array('application/x-pkcs10', 'application/pkcs10'),
 'p12'   => 'application/x-pkcs12',
 'p7a'   => 'application/x-pkcs7-signature',
 'p7c'   => array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
 'p7m'   => array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
 'p7r'   => 'application/x-pkcs7-certreqresp',
 'p7s'   => 'application/pkcs7-signature',
 'crt'   => array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'),
 'crl'   => array('application/pkix-crl', 'application/pkcs-crl'),
 'der'   => 'application/x-x509-ca-cert',
 'kdb'   => 'application/octet-stream',
 'pgp'   => 'application/pgp',
 'gpg'   => 'application/gpg-keys',
 'sst'   => 'application/octet-stream',
 'csr'   => 'application/octet-stream',
 'rsa'   => 'application/x-pkcs7',
 'cer'   => array('application/pkix-cert', 'application/x-x509-ca-cert'),
 '3g2'   => 'video/3gpp2',
 '3gp'   => array('video/3gp', 'video/3gpp'),
 'mp4'   => 'video/mp4',
 'm4a'   => 'audio/x-m4a',
 'f4v'   => array('video/mp4', 'video/x-f4v'),
 'flv' => 'video/x-flv',
 'webm' => 'video/webm',
 'aac'   => 'audio/x-acc',
 'm4u'   => 'application/vnd.mpegurl',
 'm3u'   => 'text/plain',
 'xspf'  => 'application/xspf+xml',
 'vlc'   => 'application/videolan',
 'wmv'   => array('video/x-ms-wmv', 'video/x-ms-asf'),
 'au'    => 'audio/x-au',
 'ac3'   => 'audio/ac3',
 'flac'  => 'audio/x-flac',
 'ogg'   => array('audio/ogg', 'video/ogg', 'application/ogg'),
 'kmz' => array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'),
 'kml' => array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'),
 'ics' => 'text/calendar',
 'ical' => 'text/calendar',
 'zsh' => 'text/x-scriptzsh',
 '7z' => array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
 '7zip' => array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
 'cdr' => array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'),
 'wma' => array('audio/x-ms-wma', 'video/x-ms-asf'),
 'jar' => array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'),
 'svg' => array('image/svg+xml', 'application/xml', 'text/xml'),
 'vcf' => 'text/x-vcard',
 'srt' => array('text/srt', 'text/plain'),
 'vtt' => array('text/vtt', 'text/plain'),
 'ico' => array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'),
 'odc' => 'application/vnd.oasis.opendocument.chart',
 'otc' => 'application/vnd.oasis.opendocument.chart-template',
 'odf' => 'application/vnd.oasis.opendocument.formula',
 'otf' => 'application/vnd.oasis.opendocument.formula-template',
 'odg' => 'application/vnd.oasis.opendocument.graphics',
 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
 'odi' => 'application/vnd.oasis.opendocument.image',
 'oti' => 'application/vnd.oasis.opendocument.image-template',
 'odp' => 'application/vnd.oasis.opendocument.presentation',
 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
 'odt' => 'application/vnd.oasis.opendocument.text',
 'odm' => 'application/vnd.oasis.opendocument.text-master',
 'ott' => 'application/vnd.oasis.opendocument.text-template',
 'oth' => 'application/vnd.oasis.opendocument.text-web'
);