Php CodeIgniter上载图像功能不工作

Php CodeIgniter上载图像功能不工作,php,codeigniter,Php,Codeigniter,我刚接触CI,我通过Youtube上的教程学习它。我正试图上传我在教程中找到的图片,但不幸的是它不起作用。下面是代码,请帮助我 控制器 public function create() { $data['title'] = 'Create Post'; $data['desc'] = 'Feel free to create a new post here.'; $data['categories'] = $this->post_model->get_categories(); $

我刚接触CI,我通过Youtube上的教程学习它。我正试图上传我在教程中找到的图片,但不幸的是它不起作用。下面是代码,请帮助我

控制器

public function create() {
$data['title'] = 'Create Post';
$data['desc'] = 'Feel free to create a new post here.';
$data['categories'] = $this->post_model->get_categories();

$this->form_validation->set_rules('title', 'Post Title', 'required');
$this->form_validation->set_rules('desc', 'Post Description', 'required');

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->upload->initialize($config);

  if(!$this->upload->do_upload()){
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
}

模型

public function create_post($post_image) {

$slug = url_title($this->input->post('title'));

$data = array(
  'post_title'  => $this->input->post('title'),
  'post_slug'   => $slug,
  'post_desc'   => $this->input->post('desc'),
  'post_cat_id' => $this->input->post('catid'),
  'post_image'  => $post_image
);

return $this->db->insert('posts', $data);
}

看法

打印($errors)
给出此错误。我想我现在快要解决了

Array
(
    [error] => 

The image you are attempting to upload doesn't fit into the allowed dimensions.

)
解决方案
我必须将“最大宽度”和“最大高度”更改为0,以实现无限制。由于此错误,图像未上载。

忘记加载
上载
库执行以下操作:

$this->load->library('upload', $config);
整个代码(文件上传部分)应如下所示:

else {
  // Upload Image
  $config['upload_path'] = FCPATH.'assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

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

  if($this->upload->do_upload('userfile'))
  {
    print_r($this->upload->data());die;
    $file_name = $this->upload->data('file_name');
    $post_image = $file_name; 
  } 
  else 
  {
    $errors = array('error' => $this->upload->display_errors());
    print_r($errors);die;
    $post_image = 'noimage.jpg'; 
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}

如果你认为你的代码是正确的。你检查文件夹权限了吗? 您必须授予文件夹权限才能存储图像

尝试以下更改

$config['upload_path'] = './assets/images/posts'; **to** $config['upload_path'] = getcwd().'/assets/images/posts';

您必须从自动加载中删除库上载,并像这样编辑代码

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload', $config);
  $this->upload->initialize($config);
  if(!$this->upload->do_upload('userfile')){
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
试试这个代码

 public function create() {
$data['title'] = 'Create Post';
$data['desc'] = 'Feel free to create a new post here.';
$data['categories'] = $this->post_model->get_categories();

$this->form_validation->set_rules('title', 'Post Title', 'required');
$this->form_validation->set_rules('desc', 'Post Description', 'required');

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload');
    $this->upload->initialize($config);
    if(!$this->upload->do_upload('userfile'))
    {
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}

我已经自动加载了上载库,这就是我使用
$this->upload->initialize($config)的原因而不是
$this->load->library('upload',$config)但是这两个都不起作用。还没有错误。。我不知道为什么它会执行
if(!$this->upload->do_upload()){
正确。你能帮忙吗?只需从
自动加载
中删除
上载
库并用我的答案进行检查。我更新了我的答案。请检查在将其用作自动加载之前,我已尝试使用你给出的方法。但我还是再次从自动加载中删除上载并手动重新设置。它仍然不起作用。一定有错误以我正在制作的无法引起注意的图片为例。好的,让我们调试它,使用
print\r($this->upload->data());die;
如果我的答案中给出的部分和其他部分是这样做的:
print\r($errors);die;
并检查输出是什么交叉验证您是否正在上载500*500和2MB的图像。它有什么作用?请详细解释。
if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload', $config);
  $this->upload->initialize($config);
  if(!$this->upload->do_upload('userfile')){
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
 public function create() {
$data['title'] = 'Create Post';
$data['desc'] = 'Feel free to create a new post here.';
$data['categories'] = $this->post_model->get_categories();

$this->form_validation->set_rules('title', 'Post Title', 'required');
$this->form_validation->set_rules('desc', 'Post Description', 'required');

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload');
    $this->upload->initialize($config);
    if(!$this->upload->do_upload('userfile'))
    {
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}