如何使 CodeIgniter 文件上传类接受所有扩展?
Posted
技术标签:
【中文标题】如何使 CodeIgniter 文件上传类接受所有扩展?【英文标题】:How to make CodeIgniter file upload class accept all extensions? 【发布时间】:2010-11-01 09:03:27 【问题描述】:目前,如果我不为该类提供扩展,则它不允许扩展。我想允许所有扩展。有什么方法可以在不破解内核的情况下做到这一点?
【问题讨论】:
【参考方案1】:在 Codeigniter 2 中,您只需要像这样定义允许的类型:
$config['allowed_types'] = '*';
【讨论】:
也适用于 CodeIgniter 3【参考方案2】:我做的是:
$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;
这使得每个函数调用中的所有文件都自动被允许。
【讨论】:
【参考方案3】:您直接问题的答案:不,如果不覆盖核心,就无法做到这一点
好消息是你可以避免破解内核,per the manual
作为额外的奖励,CodeIgniter 允许您的库扩展 如果您只需要添加一些功能到本机类 现有的图书馆。或者你甚至可以替换本地库 通过将同名版本放置在您的应用程序/库文件夹中。
因此,要替换您的库,您可以将 Upload.php 复制到您的
application/libraries
文件夹,然后将您的自定义逻辑添加到该 Upload.php 文件。每当您加载上传库时,Code Igniter 都会包含此文件。
或者,您可以创建自己的 OWN 自定义上传器类来扩展原始文件,并且只改进 is_allowed_filetype 函数。
application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload
function is_allowed_filetype()
//my custom code here
每当您升级时,您都需要阅读the changelog,但这将允许您将您的代码和核心代码保存在不同的宇宙中。
【讨论】:
Alan 的 magento 编码进展如何?【参考方案4】:到目前为止,它似乎只能通过黑客来实现。
我在 system/libraries/Upload.php 的第 556 行插入了 return true
。
【讨论】:
我更喜欢制作自定义库而不是编辑 system/libraries/ 文件夹。在 CI 上更新到新版本通常意味着用最新版本替换旧的 system/ 文件夹(system/application/ 除外)。 CMIIW【参考方案5】:$config['allowed_types'] = '*';
它将上传任何文件格式,如 .exe 或 .jpegs 额外...
【讨论】:
【参考方案6】:如果一切都不起作用,则重新排列允许的类型顺序,如第一个视频格式中的那样
$config['allowed_types'] = 'mp4|jpg|png|'
它适用于我的情况,所以我分享了如果可能的话尝试一下。
【讨论】:
【参考方案7】:你只需要替换这个条件:
if (! $this->is_allowed_filetype())
$this->set_error('upload_invalid_filetype');
return false;
与:
if (count($this->allowed_types) && !$this->is_allowed_filetype())
$this->set_error('upload_invalid_filetype');
return false;
【讨论】:
【参考方案8】:$config['allowed_types'] = '*';
是可能的解决方案,但恕我直言,它不是很安全。更好的方法是在$config['allowed_types'] 中添加你需要的文件类型。如果 CodeIgniter 没有您需要的 MIME 类型,您可以通过在“application/config”文件夹中编辑文件 mimes.php 来添加它们。只需将您的 mime 类型包含在数组中即可。
添加 epub 和 fb2 文件类型的示例:
return array(
'epub' => 'application/epub+zip',
'fb2' => 'application/x-fictionbook+xml',
'hqx' => array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),
然后你就可以使用你在$config['allowed_types']变量中添加的扩展了。
【讨论】:
以上是关于如何使 CodeIgniter 文件上传类接受所有扩展?的主要内容,如果未能解决你的问题,请参考以下文章