2011-01-22 5 views
2

codeigniter가 지정된 시간 (분) 동안 뷰 출력을 저장하는 것처럼 보입니다. 사용자가 해당 분을 몇 분 이내에 다시 요청하면 요청을 다시 처리하는 대신 저장된 버전의 페이지를 제공합니다. 보기의 모든 출력을 파일로 저장하는 것처럼 보이지만 어떻게 처리합니까? 그런 다음이 캐시 된 파일의 만료 시간을 어떻게 알 수 있습니까?codeigniter와 같은 프레임 워크는 페이지 캐싱을 어떻게 수행합니까?

이 유형의 캐시 모델을 사용하는 페이지에 대한 로그인 보안은 어떻게 생성됩니까?

어떤 통찰력이라도 대단히 감사하겠습니다. 감사! 코어 CodeIgniter.php 라인 (177)에서

+0

템플릿 시스템 대신, 아마도 출력을 캡처하고 저장하기 위해'ob_start'와 친구들을 사용할 것입니다. 캐싱 작업을하는 가장 좋은 방법은 조건부 HTTP 헤더 인 If : 및 If-Modified-Since :를 사용하는 것입니다. CodeIgniter가 실제로 그렇게하는지 또는 미리 구성된 타임 아웃에만 의존하는지는 모르지만. – mario

답변

0

/:

이는 캐시 된 파일이 아닌 디스플레이 제어기/액션 코드를 처리하기위한 검사
if ($EXT->_call_hook('cache_override') === FALSE) 
    { 
     if ($OUT->_display_cache($CFG, $URI) == TRUE) 
     { 
      exit; 
     } 
    } 

.

표시되기 전에 캐시 된 파일의 만료 확인 방법을 Output 클래스에서 읽을 수도 있습니다.

function _display_cache(&$CFG, &$URI) 
{ 
    $cache_path = ($CFG->item('cache_path') == '') ? APPPATH.'cache/' : $CFG->item('cache_path'); 

    // Build the file path. The file name is an MD5 hash of the full URI 
    $uri = $CFG->item('base_url'). 
      $CFG->item('index_page'). 
      $URI->uri_string; 

    $filepath = $cache_path.md5($uri); 

    if (! @file_exists($filepath)) 
    { 
     return FALSE; 
    } 

    if (! $fp = @fopen($filepath, FOPEN_READ)) 
    { 
     return FALSE; 
    } 

    flock($fp, LOCK_SH); 

    $cache = ''; 
    if (filesize($filepath) > 0) 
    { 
     $cache = fread($fp, filesize($filepath)); 
    } 

    flock($fp, LOCK_UN); 
    fclose($fp); 

    // Strip out the embedded timestamp 
    if (! preg_match("/(\d+TS--->)/", $cache, $match)) 
    { 
     return FALSE; 
    } 

    // Has the file expired? If so we'll delete it. 
    if (time() >= trim(str_replace('TS--->', '', $match['1']))) 
    { 
     if (is_really_writable($cache_path)) 
     { 
      @unlink($filepath); 
      log_message('debug', "Cache file has expired. File deleted"); 
      return FALSE; 
     } 
    } 

    // Display the cache 
    $this->_display(str_replace($match['0'], '', $cache)); 
    log_message('debug', "Cache file is current. Sending it to browser."); 
    return TRUE; 
} 
+0

흥미 롭습니다. 그러나 페이지가 로그인 뒤에 있어야한다면 어떻게 될까요? 컨트롤러로 보내지 않으면 개발자가 어떻게 세션 권한 검사를 추가 할 수 있습니까? – dqhendricks

+0

또한 매번 전체 파일 내용을 preg_match 및 preg_replace해야만하는 부끄러운 것처럼 보입니다. 만료 시간을 측정하는 더 좋은 방법이 있어야합니다. – dqhendricks

관련 문제