codeigniter do_upload无效

时间:2016-12-27 07:37:52

标签: php codeigniter file-upload

我尝试使用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->upload->initialize($config);文件未上传后停止,并且根本没有消息。只显示'start upload'消息; echo 'success'echo 'error'echo 'end upload'未显示。

为什么?任何人都可以帮助我吗?

10 个答案:

答案 0 :(得分:0)

试试这样....

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
  }

}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我检查这段代码这项工作是否完美 只需添加此行

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

之后

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

或者您也可以在视图页面

中进行设置
action="<?php echo base_url('YourController/testupload');?>"

答案 3 :(得分:0)

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

1)。转到cpanel帐户

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

3)。在php选项中输入“fileinfo”chexbox并保存。

现在您可以完美地上传文件。

答案 4 :(得分:0)

聚会晚会,但这也许可以帮助遇到同样问题的人。请尝试以下方法:

观看次数

<?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();
        }
    }
}

视图内部,我建议使用此功能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中找到

答案 5 :(得分:0)

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

答案 6 :(得分:0)

使用此图像上载:

  $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);

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

您的代码缺少以下内容,

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

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