Como evitar o cache do navegador usando Codeigniter

Enfrentando o problema relacionado ao chache do navegador.

function doUpload(){ $data['includeView'] = "profileconfirm"; $config['upload_path'] = './img/images/uploaded/'; $config['allowed_types'] = 'gif|jpg|png|jpeg'; $config['max_size'] = '5000'; $config['max_width'] = '1024'; $config['max_height'] = '768'; $config['file_ext'] =".jpeg"; $config['file_name'] = $profileId.$config['file_ext']; $config['overwrite'] = TRUE; $this->load->library('upload', $config); $query = null ; if ( ! $this->upload->do_upload()){ // Error here }else{ // Image uploaded sucess fully // $profile - business logic to populate $profile $data['PROFILE_DETAILS'] = $profile; $this->load->view('index', $data); } 

Este método é usado para upload de imagens. Após o upload bem sucedido da imagem, ele carrega a página de exibição de índice, que inclui internamente a página de exibição profileconfirm.

Mas na página profileconfirm, a nova imagem carregada não vai refletir. Algumas vezes funciona bem, mas algumas vezes não, isso acontece a maioria das vezes.

Por favor ajude

Você pode enviar headers apropriados para o cliente para desabilitar o cache:

 .... $this->output->set_header("HTTP/1.0 200 OK"); $this->output->set_header("HTTP/1.1 200 OK"); $this->output->set_header('Last-Modified: '.gmdate('D, d MYH:i:s', $last_update).' GMT'); $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate"); $this->output->set_header("Cache-Control: post-check=0, pre-check=0"); $this->output->set_header("Pragma: no-cache"); $this->load->view('index', $data); 

Nota: a class de saída é inicializada automaticamente

Basta adicionar um timestamp ao atributo src da imagem que está sendo exibida.

  

Para desativar o cache completamente com uma linha de código (depois de estender a biblioteca de saída), reveja http://www.robertmullaney.com/2011/08/13/disable-browser-cache-easily-with-codeigniter/
Disclaimer, meu blog

Editar 1: A solução aceita é um exagero na minha opinião, quando tudo que você quer fazer forçar-recarregar a imagem no navegador;)
Editar 2: simplificou a solução sugerida.

Experimente o seguinte:

 if (!$this->upload->do_upload()) { $error = array('errors' => $this->upload->display_errors("
  • ","
  • ")); $this->load->view('index', $error); }else{ $data['PROFILE_DETAILS'] = $profile; $this->load->view('index', $data); }

    e, em seguida, exiba os erros na sua visualização, assim:

     < ?php if($errors): ?> 
      < ?php print $errors ?>
    < ?php endif; ?>

    e veja quais erros você está recebendo.