Hàm check xem file cache tồn tại ở đâu trong 1000 thư mục từ 1 đến 1000 PHP: $cached_file = cached_file_exists('cache_dir', $_GET['id']);if($cached_file === false){#curl and save cache$cached_file = sprintf('cache/%s/%u/pro%s','cache',rand(1,1000),$_GET['id']);}else{#get cached file to use}function cached_file_exists($parentDir = 'cache_dir', $fileName = 'name_or_id_product'){ for($i = 1; $i < 1001; ++$i){ $path = sprintf('cache/%s/%u/%s',$parentDir, $i, $fileName); if(file_exists($path)) return $path; } return false; }
Trưởng lão dùng đệ quy + glob » array sort để filter các file đã hết hạn » xóa thì nhanh hơn. PHP: // ...array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_ASC, $items);// ...
Mình dùng lệnh này để tạo cache mới và dùng cache có sẵn. Còn xóa thì dùng lệnh find trên centos bật cronjob hàng ngày.
Site của tớ nè ) đang bị tụt index ghê lắm youtubedownload[.]pro Get dữ liệu thì cần gì proxy ^^ do cách get thôi
của mình như này thì thêm như nào nhỉ PHP: $break = Explode('/', $_GET['id']);$file = $break[count($break) - 1];$cachefile = 'cache/v'.$file.'.txt';$cachetime = 12000;// Serve from the cache if it is younger than $cachetimeif (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) { //echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n"; include($cachefile); exit;}ob_start(); // Start the output buffer$data = file_get_contents('https://tuoitre.vn/'.$_GET['id']);preg_match("#<title>(.*?)</title>#is", $data, $title );echo $title[1];// Cache the contents to a file$cached = fopen($cachefile, 'w');fwrite($cached, ob_get_contents());fclose($cached);ob_end_flush(); // Send the output to the browser
PHP: $cachetime = 12000;$cachefile = cached_file_exists('cache_dir', $_GET['id']);if($cachefile !== false && time() - $cachetime < filemtime($cachefile)){#get cached file to use include_once($cachefile); exit;}else{ #curl and save cache $cachefile = sprintf('cache/%s/%u/pro%s','cache',rand(1,1000),$_GET['id']); ob_start(); // Start the output buffer $data = file_get_contents('https://tuoitre.vn/'.$_GET['id']); preg_match("#<title>(.*?)</title>#is", $data, $title ); echo $title[1]; // Cache the contents to a file $cached = fopen($cachefile, 'w'); fwrite($cached, ob_get_contents()); fclose($cached); ob_end_flush(); // Send the output to the browser}function cached_file_exists($parentDir = 'cache_dir', $fileName = 'name_or_id_product'){ for($i = 1; $i < 1001; ++$i){ $path = sprintf('%s/%u/%s',$parentDir, $i, $fileName); if(file_exists($path)) return $path; } return false; } Nhớ tạo 1000 thư mục stt từ 1 -> 1000 trong cache_dir đặt tại public_html Mà theo như code của cậu thì nó cache mỗi cái echo ra là title thôi à
Đang còn 1.5tr index, 1 tháng cũng vài trăm k view ngon ăn mà bác. Chia sẽ bí quyết index nhiều như này được ko bác? À, bác bỏ cái addthis ở trang chủ đi bác, nó che hết cả menu nhìn vướng quá.
Inbox Bác làm vậy rồi thời gian đau đi chơi ^^ mọi việc đều có cách giải quyết, ăn cơm xổi vậy mệt lắm
Mà cái lệnh này nó chạy như thế nào vậy bác. Đọc định nghĩa thì nó sẽ sort 1 mảng thời gian cache của list items theo kiểu tăng dần của số và sort kiểu mặc định cho mảng items (Compare elements normally (Standard ASCII))
Trưởng môn nói hết rồi còn hỏi gì nữa . Mình dùng đoạn đó để thực hiện 1 chức năng : chỉ lưu lại tối đa 10 file mới nhất mà user tải lên.
Ý là mình ko hiểu mảng a (chứa danh sách các con số là thời gian cache từ ngắn tới dài) và mảng b là tên file theo thứ tự ASCII. Sau đó xử lý 2 mảng này thế nào để nó xóa các file trong b có filemtime vượt quá timecache đề ra trước đó ấy.
Có 1 mảng duy nhất thôi @Nai ơi! Đoạn code của mình bên dưới : PHP: <?php$time_now = time();$cache_time = 86400;$items = glob('dir-name/*.jpg', GLOB_NOSORT);if (!empty($items)){ array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_ASC, $items); foreach ($items as $item) { if (($time_now - filectime($item)) > $cache_time) { @unlink($item); } else { break; } }}?>