【问题标题】:codeigniter do_upload not workingcodeigniter do_upload 不工作
【发布时间】:2016-12-27 07:37:52
【问题描述】:

我正在尝试使用 codeigniter 的上传库在我的网站中添加文件上传功能。

这是我的视图文件(display.php):

<html>
<body>
    <form method="post" action="" enctype="multipart/form-data">
        <input type="file" name="filename" />
        <input type="submit" name="submit" id="submit" value="submit"/>
    </form>
</body>
</html>

这是控制器:

public function testupload()
{
  if ( ! empty($_FILES))
  {
    echo 'start upload';
    $config['upload_path'] = './assets/img/tempfile/';
    $this->load->library('upload');
    $this->upload->initialize($config);
    if ( ! $this->upload->do_upload('filename'))
    {
      echo 'error!';
    }
    else
    {
      echo 'success!';
    }
    echo 'end upload';
  }
  $this->load->view('display', $this->data);
}

但代码似乎在$this-&gt;upload-&gt;initialize($config); 文件未上传后停止,根本没有任何消息。只出现'start upload' 消息; echo 'success'echo 'error'echo 'end upload' 不会出现。

这是为什么呢?谁能帮帮我??

【问题讨论】:

  • 使用$this-&gt;upload-&gt;display_errors()调试错误
  • 启用调试模式。 ini_set('display_errors', '1'); error_reporting(E_ALL); 并把这个也打印出来$this-&gt;upload-&gt;display_errors();
  • 不。没有任何工作。如果放在$this-&gt;upload-&gt;do_upload('filename'); 之后,即使是简单的echo 'blabla'; 也不起作用。我尝试了@Naga 的建议,但仍然没有。
  • 你的操作是空的,试试action="&lt;?php echo base_url('controller/function');?&gt;"不要去自动加载url助手
  • 我想如果action属性是空字符串,它会指向同一个函数吗?无论如何,我尝试将上传部分放到另一个函数中,但仍然相同。只出现了start upload 消息,之后就没有了。

标签: php codeigniter file-upload


【解决方案1】:

聚会迟到了,但也许这可以帮助遇到同样问题的人。请试试这个:

观看次数

<?php echo form_open_multipart('test/upload');?>
    <input type="file" name="photo">
<?php echo form_close();?>

控制器

class Test extends CI_Controller {
    function upload() {
        $config = array(
            'upload_path'  => './assets/upload/',
            'allowed_types'=> 'gif|jpg|png',
            'encrypt_name' => TRUE // Optional, you can add more options as need
        );
        $this->load->library('upload', $config);
        if ( ! $this->upload->do_upload('photo')) {
            echo '<pre>';
            print_r($this->upload->display_errors());
            exit();
        } else {
            echo '<pre>';
            print_r($this->upload->data());
            exit();
        }
    }
}

views里面我推荐使用这个函数form_open_multipart('ctrl/method')但是如果你更喜欢使用HTML5表单,请确保像这样更正表单中的属性。

<form action="<?=site_url('ctrl/method')?>" enctype="multipart/form-data" method="post" accept-charset="utf-8">
    <input type="file" name="photo">
</form>

$config['..'] 中的更多首选项可以在文档 CodeIgniter https://codeigniter.com/user_guide/libraries/file_uploading.html 中找到

【讨论】:

    【解决方案2】:

    试试这样......

    public function testupload()
    {
      if ( ! empty($_FILES))
      {
        echo 'start upload';
        $config['upload_path'] = './assets/img/tempfile/';
        $this->load->library('upload',$config);
        if ( ! $this->upload->do_upload('filename'))
        {
           $error = array('error' => $this->upload->display_errors());
            $this->load->view('display', $error);  //loads the view display.php with error
        }
        else
        {
          echo 'success!';
        }
        echo 'end upload';
        $data = array('upload_data' => $this->upload->data());
        $this->load->view('display', $data); //loads view display.php with data
      }
    
    }
    

    【讨论】:

    • 同样的结果..提交后只显示start upload,之后什么都没有..
    • 我认为您必须设置更多$config[]..请参阅此处codeigniter.com/userguide3/libraries/file_uploading.html
    • 还要检查您上传文件夹的写入权限...问题可能是由于这个...
    • 我使用 is_writable 检查过它是可写的。尝试删除 !empty($_FILES) 条件,但仍然是同样的事情......
    【解决方案3】:

    改变

    $config['upload_path'] = './assets/img/tempfile/';
    

    $config['upload_path'] = 'assets/img/tempfile/';
    

    【讨论】:

    • './assets/img/tempfile/'assets/img/tempfile/'有什么区别??
    【解决方案4】:

    我检查了这段代码,这个工作完美 只需添加这一行

     $config['allowed_types'] = 'png|gif|jpg|jpeg';
     $config['max_size']    = '7000';
    

    之后

     $config['upload_path'] = './assets/img/tempfile/';
    

    或者你也可以在视图页面中设置这个

    action="<?php echo base_url('YourController/testupload');?>"
    

    【讨论】:

      【解决方案5】:

      这是由于 php 服务器版本和它的选项。

      1).去cpanel账号

      2).点击软件部分的“选择php版本”。

      3).点击php选项中的“fileinfo”复选框并保存。

      现在你可以完美上传文件了。

      【讨论】:

        【解决方案6】:

        与描述的问题相同。我已使用以下方法对其进行了修复:打开文件 system/libraries/Upload.php 转到函数 validate_upload_path() 并将命令 return TRUE; 添加为该函数内的最后一行。保存并重试。

        【讨论】:

          【解决方案7】:

          用它来上传图片:

            $valid_extensions = array('jpeg', 'jpg', 'png');
            if ($_FILES['filename']['error'] == 0) {
          
                  $img = $_FILES['filename']['name'];
                  $tmp = $_FILES['filename']['tmp_name'];
                  $ext = strtolower(pathinfo($img, PATHINFO_EXTENSION));
                   if (in_array($ext, $valid_extensions)) {
                      $path = "./assets/img/tempfile/" . strtolower($img);
                      if (move_uploaded_file($tmp, $path)) {
          
                          $_POST['filename'] = $path;
          
                      }
                  }
              }
          

          使用插入查询插入文件:

                 $this->db->insert('table_name', $_POST);
          

          【讨论】:

            【解决方案8】:

            在 macOS 上遇到同样的问题。看来,如果您不是笔记本电脑/PC 的“主要”用户,则默认权限为“只读”。您必须将其更改为“读写”。

            1. 右键单击文件夹
            2. 获取信息
            3. 共享和权限
            4. 将“只读”更改为“读写”

            【讨论】:

              【解决方案9】:

              在配置中添加允许的文件类型参数

              $config['allowed_types'] = 'gif|jpg|png';
              

              【讨论】:

                【解决方案10】:

                您的代码缺少以下内容,

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

                通过重写上面的代码来纠正它。

                【讨论】:

                  猜你喜欢
                  • 2022-08-08
                  • 2016-05-15
                  • 1970-01-01
                  • 2014-12-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-01-25
                  • 2017-05-26
                  相关资源
                  最近更新 更多