PHP Cache специфические части страницы - PullRequest
5 голосов
/ 09 февраля 2012

У меня есть разделы на странице, которые требуют достаточного количества ресурсов, которые я хотел бы кэшировать, вот пример страницы.

[=== Some Static HTML ===]
[=== PHP Script 1 ===]
[=== Some Static HTML ===]
[=== PHP Script 2 ===]

Я хотел бы поместить «PHP Script 1» в файл кэша, например, script1.html, и включить его, а не обрабатывать весь сценарий, и то же самое для Script 2.

У меня проблема в том, что я могу легко кэшировать всю страницу, и она работает, но я хотел бы просто кэшировать определенные части (как указано выше), потому что некоторые вещи, такие как данные сеанса пользователя, должны быть активными.

У меня есть этот класс, который предназначен для того, чтобы иметь возможность останавливать и запускать буфер, чтобы я мог извлекать определенные части, не ломая остальную часть страницы, однако он не выполняет то, что я хочу. http://pastebin.com/Ua6DDExw

Я хотел бы иметь возможность пойти так, как показано ниже, в то время как он будет хранить раздел в файле с простым подключением php, а не базы данных.

HTML Content

<?php
$cache->start_buffer("cache_name");
// PHP Script
$cache->end_buffer("cache_name");
?>

HTML Content

<?php
$cache->start_buffer("cache_name");
// PHP Script
$cache->end_buffer("cache_name");
?>

У меня нет доступа к memcache или чему-то еще, потому что это будет на общем хостинге.

Любая помощь будет великолепна, Спасибо

1 Ответ

4 голосов
/ 09 февраля 2012

изучите использование ob_start() и ob_flush() Это делает то, что вы хотите сделать. Вам нужно будет вручную записать его в файл. Также существуют классы cache.php.

http://php.net/manual/en/function.ob-start.php

<?php  

  $cache_time = 3600; // Time in seconds to keep a page cached  
  $cache_folder = '/cache'; // Folder to store cached files (no trailing slash)  

  // Think outside the box the original said to use the URI instead use something else.
  $cache_filename = $cache_folder.md5(",MyUniqueStringForMyCode"); // Location to lookup or store cached file  

  //Check to see if this file has already been cached  
  // If it has get and store the file creation time  
  $cache_created  = (file_exists($cache_file_name)) ? filemtime($this->filename) : 0;

  if ((time() - $cache_created) < $cache_time) {  
    $storedData = readCacheFile($cache_filename);
  }
  else
  {

    // Alternatively you can ignore the ob_start/get_contents/end_flush code 
    // and just call a function and store it directly to the variable.
    // Start saving stuff
    ob_start();  

    /** do your work here echoing data to the screen */

    $storedData = ob_get_contents();
    ob_end_flush();

    // create the cachefile for the data.
    createCacheFile($cache_filename);
  }


  // Do stuff with $storedData.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...