为了账号安全,请及时绑定邮箱和手机立即绑定

CodeIgniter:“不允许您尝试上传的文件类型。”

CodeIgniter:“不允许您尝试上传的文件类型。”

PHP
红颜莎娜 2019-11-20 10:17:34
我遇到一个非常奇怪的上传问题。这是相关的视图文件:<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data">    <fieldset>        <input type="file" name="userfile"/>        <input type="submit" value="Upload"/>    </fieldset></form>这是我的temp控制器的upload()方法:public function upload(){    $config['upload_path']   = FCPATH . 'uploads' . DIRECTORY_SEPARATOR;    assert(file_exists($config['upload_path']) === TRUE);    $config['allowed_types'] = 'avi|mpg|mpeg|wmv|jpg';    $config['max_size']      = '0';    $this->load->library('upload', $config);    if ($this->upload->do_upload('userfile') === FALSE)    {        // Some error occured        var_dump($this->upload->display_errors('', ''));        var_dump($_FILES);    }    else    {        // Upload successful        var_dump($this->upload->data());    }}当我上传AVI视频时,一切正常。当我上传WMV视频时,会收到以下var转储:string 'The filetype you are attempting to upload is not allowed.' (length=57)array  'userfile' =>     array      'name' => string 'wmv.wmv' (length=7)      'type' => string 'video/x-ms-wmv' (length=14)      'tmp_name' => string 'C:\wamp\tmp\php2333.tmp' (length=23)      'error' => int 0      'size' => int 83914“ wmv”扩展名被解释为MIME类型:video/x-ms-wmv。这应该没问题,因为我的config / mimes.php具有以下内容:'wmv' =>  array('video/x-ms-wmv', 'audio/x-ms-wmv')当我尝试上传其他文件时,情况与此类似。到目前为止,似乎唯一起作用的是我的测试AVI视频。任何想法可能有什么问题吗?更新1:我的机器上只有AVI上传。在其他开发人员的计算机上,没有文件上传。在另一台开发人员的计算机上,所有受支持的文件都将上载。这些是浏览器还是服务器问题?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

使用运行CodeIgniter应用程序的FTP / SFTP / scp / etc将.wmv文件上传到服务器

在上载.wmv文件的服务器上,执行以下PHP代码


<?php

$file_path = 'CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv';

$finfo = finfo_open(FILEINFO_MIME);

$mime = finfo_file($finfo, $file_path);

var_dump($mime);

?>

将代码另存为mime.php


在终端中运行-$ php mime.php

如果它转储了wmv以外的任何其他值,则将该值附加到wmv mime类型中。

还要在其他开发机器中检查PHP_VERSION。finfo_open在PHP 5.3中引入。上载正常工作的开发计算机可能具有旧版本的PHP,或者可能具有适用于wmv的正确的mime类型。


查看完整回答
反对 回复 2019-11-20
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我最近在Codeigniter的Upload Class中遇到了一些非常相似的问题。


* allowed_types *似乎不起作用。例如,我想允许上传.PNG图片,但不允许它们通过过滤器。我最终进行了进一步调查。我允许所有文件类型临时上载,我上载.PNG,然后转储上载数据($ this-> upload-> data()); )。由于某种原因,它认为MIME类型为text / plain!这可能与您的问题有关。


有一些解决方案,我在一些论坛上冲浪,您可以在其中修改/扩展类或核心,但是它们对我不起作用-抱歉。我认为这是Codeigniter Core的错误(我认为该问题已经由EllisLabs提出)。无论如何,我最终还是硬编码了该死的东西!好吧,希望对您有所帮助。


基本示例/解决方法,


//replace with your allowed MIME types

if ($_FILES['name_of_form_upload']['type'] != 'image/jpeg' && $_FILES['name_of_form_upload']['type'] != 'image/png' && $_FILES['name_of_form_upload']['type'] != 'image/gif') {

    $data['message'] = '<div class="message">That file type is not allowed!</div>';

    $this->load->view('home_view', $data);

} else {

    //run upload code

}

编辑:格式/语法


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 545 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信