如何使用Codeigniter避免浏览器缓存

时间:2011-01-24 12:03:36

标签: php codeigniter

面对与浏览器chache相关的问题。

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

此方法用于图片上传。成功上传图像后,它会加载索引视图页面,其中包含profileconfirm视图页面。

但是在profileconfirm页面上新上传的图片不会反映出来。有时候它工作正常,但有时候没有,这种情况大多数时候都会发生。

请帮忙

3 个答案:

答案 0 :(得分:13)

您可以向客户端发送正确的标头以禁用缓存:

....
$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 M Y H: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);

注意:输出类自动初始化

答案 1 :(得分:4)

只需为正在显示的图像的src属性添加时间戳。

<img src="filename.jpg?<?php echo time(); ?>">

要使用一行代码完全禁用缓存(在扩展输出库之后),请查看http://www.robertmullaney.com/2011/08/13/disable-browser-cache-easily-with-codeigniter/
免责声明,我的博客

编辑1:当我想要的所有操作强制重新加载浏览器中的图像时,我认为接受的解决方案有点过分了;)
编辑2:简化了建议的解决方案。

答案 2 :(得分:-1)

尝试以下方法:

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

然后在视图中显示错误,如下所示:

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

看看你得到了什么错误。