2012-02-09 17 views
5

Tôi có các phần trên trang yêu cầu số lượng tài nguyên hợp lý mà tôi muốn lưu vào bộ nhớ cache, đây là ví dụ về trang.Bộ nhớ cache PHP các phần cụ thể của một trang

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

Tôi muốn đặt "PHP Script 1" vào một tập tin bộ nhớ cache ví dụ script1.html và bao gồm nó chứ không phải xử lý toàn bộ kịch bản, và tương tự cho Script 2.

Tôi có vấn đề là tôi có thể cache toàn bộ trang một cách dễ dàng và nó hoạt động nhưng tôi muốn chỉ bộ nhớ cache các bộ phận cụ thể (như trên) vì một số điều như dữ liệu phiên người dùng cần phải được sống.

Tôi có lớp này có nghĩa là để có thể dừng lại và bắt đầu bộ đệm để tôi có thể kéo ra các phần cụ thể mà không vi phạm phần còn lại của trang nhưng nó không làm những gì tôi muốn. http://pastebin.com/Ua6DDExw

Tôi muốn có thể thực hiện như sau bên dưới, trong khi nó sẽ lưu phần trong một tệp bằng một đơn giản php inlcude thay vì nhấn vào cơ sở dữ liệu.

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

Tôi không có quyền truy cập vào memcache hoặc bất kỳ thứ gì khác như thế vì điều này sẽ diễn ra chia sẻ lưu trữ.

Bất kỳ trợ giúp sẽ là tuyệt vời, Cảm ơn

+1

Bất kỳ ai khác có một số ý tưởng? –

Trả lời

4

nhìn vào sử dụng ob_start()ob_flush() Nó không những gì bạn đang tìm kiếm để làm. Bạn sẽ cần phải viết thủ công nó vào một tệp. Có các lớp cache.php trong tự nhiên.

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. 
+0

Cảm ơn bạn, tôi sẽ làm một số nghiên cứu thêm. Tôi đã có một thời gian khó hiểu tất cả các chức năng đệm khác nhau. –

+2

Hãy thử hướng dẫn này, nó giải thích chính xác những gì bạn muốn làm. http://www.mikebernat.com/blog/Caching_PHP_Pages_with_Output_Buffering – thenetimp

+0

Lệnh/tập lệnh đó sẽ chỉ hoạt động nếu tôi đang cố lưu vào bộ nhớ cache toàn bộ trang. Vui lòng đọc lại câu hỏi của tôi. –

Các vấn đề liên quan