php
  • codeigniter
  • 2011-01-24 3 views 4 likes 
    4

    Облицовка проблемы, связанной с браузером chache.Как избежать кеширования браузера с помощью Codeigniter

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

    Этот метод используется для загрузки изображения. После успешной загрузки изображения он загружает страницу просмотра индексов, которая внутри включает страницу просмотра профиля профиля.

    Но на странице профиляподробнее новое загруженное изображение не будет отображаться. Иногда это работает нормально, но иногда это не так, это происходит в большинстве случаев.

    Пожалуйста, помогите

    ответ

    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

    что такое '$ last_update'? –

    +0

    Почему вы используете $ last_update здесь? – sheetal

    -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; ?> 
    

    и посмотреть, какие ошибки вашего получения.

    +0

    Я не получаю никаких ошибок, моя проблема связана с chache. Файл загружен успешно в папку сервера, но новый загруженный файл не отображается на подтверждении страницы img tag – Vicky

    +0

    @ Vicky, потому что изображения и страницы кэшируются независимо. Посмотрите мое решение выше, как предотвратить кэширование изображений в вашем шаблоне;) –

    4

    Просто добавьте метки к атрибуту ГКЗ выводимого изображения.

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

    Чтобы отключить кэш полностью с одной строки кода (после расширения библиотеки Output) обзор http://www.robertmullaney.com/2011/08/13/disable-browser-cache-easily-with-codeigniter/
    Отказ от ответственности, мой блог

    Edit 1: Принятое решение является излишеством, на мой взгляд когда все, что вы хотите сделать, перезагрузить изображение в браузере;)
    Редактировать 2: Упрощено предлагаемое решение.

    Смежные вопросы