文件上传失败,尽管满足配置标准PHP编码器


File Upload Fails Despite Meeting Configuration Criteria PHP Codeigniter

我正在尝试让用户使用CodeIgniter的内置文件上传类上传文件。

这是上传表单:

upload_form.php

<?php if($error) : ?>
<div class="alert alert-danger">
    <p><?php echo $error;?></p>
</div>
<?php endif ;?>
<form  class="form-horizontal" role="form" action="<?=base_url().'upload/do_upload'?>" enctype = "multipart/form-data" >
    <div class="form-group">
        <label for="userfile" class="col-sm-1 control-label">Picture</label>
        <div class="col-sm-1">
            <input type="file" id="userfile" name ="userfile">
        </div>
    </div>
    <button type="submit" class="col-sm-offset-1 btn btn-default">Submit</button>
</form>

如您所见,用户选择了一个文件,然后提交了它。

这是表单的操作文件:

upload.php

        //Checks Image Before Upload, Throws Errors Or Uploads, Resizes And Shows Upload Success Page
    function do_upload()
    {
        //Config Parameters For Allowed Uploads
        $config['upload_path']= base_url().'uploads';
        $config['allowed_types']='gif|jpeg|png|jpg|bmp';
        $config['max_size']='5000';
        $config['max_width']='10000';
        $config['max_height']='10000';
        $config['remove_spaces'] = TRUE;
        $config['encrypt_name'] = TRUE; 
        
        //Load The Upload Library With Said Configuration
        $this->load->library('upload',$config);
        
        //If The Image Didn't Meet The Required Parameters
        if(!$this->upload->do_upload())
            {
                //Throw An Error, Then Load The Uplaod Form Again With The Error Deatils
                $error = array('error'=>$this->upload->display_errors());
                $this->load->view('header');
                $this->load->view('upload_form',$error);
                $this->load->view('footer');
                echo "here";
                die();
            }
        //If The Image Met The Required Parameters
        else
            {
                                 Upload Image
            }
        
        }

请注意:

  1. 表单的action指向正确的位置。
  2. 表单的enctype正确设置为multipart/form-data/
  3. 我严格遵守CI文档中的要求。

考虑到所有这些,do_upload函数仍然无法执行(意思是- (!$this->upload->do_upload())为真),并且记录到错误数组的错误(通过codeigniter的display_errors()函数)是您没有选择要上传的文件

把问题分成可消化的小块:

  1. 为什么函数开始失败?
  2. 当我清楚地尝试上传文件时,为什么会显示此错误?
  3. 这一切的错误是什么-一个粗糙的书写形式,或滥用CI的文件上传类?

最终得到了解决方案-与<form>标记设置有关。

这是正确的:

<form action="upload_destination_url" method="post" accept-charset="utf-8" enctype="multipart/form-data" class="form-horizontal">

可能是哑剧类型的问题。请检查mime配置文件mime .php

中的mime类型是否可用。

如果没有,则通过以下代码

获取mime类型
echo $this->upload->file_type ; // will give mime type of file.

用在

之后
$this->upload->do_upload(); 

您将获得mime类型。将mime类型添加到位于

的mime .php文件中

/应用程序/配置

例如,如果文件扩展名为pptx, mime类型为application/powerpoint然后将PPTX的$mime数组更新为

 'pptx' => array('application/powerpoint')
编辑:

完成以下更改,它适用于我。

1)在视图中,我添加了method="post"

<form class="form-horizontal" role="form" method="post" action="<?=base_url().'welcome/do_upload'?>" enctype = "multipart/form-data" >

2)在控制器上传路径中声明为
$config['upload_path']= './uploads/';

上传目录与应用程序目录在同一文件夹