Hướng dẫn dùng php ob_start trong PHP
Ob_start trong php là một trong những từ khóa được gg search nhiều nhất về chủ đề ob_start trong php. Trong bài viết này, cachthietkeweb.vn sẽ viết bài viết tổng hợp ob_start trong php mới nhất 2020. Trong PHP vốn vừa mới chạy mau nay còn có thêm cơ chế cache sử dụng cho ngôn ngữ PHP ngày càng hoàn hảo. Tôi nhắc đến cơ chế cache vì các hàm ob_start(), ob_get_contents(), ob_clean(), ob_end_flush() sẽ hỗ trợ chúng ta trong tiến trình thực hiện cơ chế này. Tôi có 1 ví dụ không khó khăn giống như sau: ob_start(); echo "Hieu.dev. "; Echo "From e-web.vn"; $content1 = ob_get_contents(); ob_clean(); ob_end_flush(); echo $content1; // Hieu.dev. From e-web.vn ob_start(); echo "The quick brown fox Jumps over the lazy dog."; $content2 = ob_get_contents(); ob_clean(); ob_end_flush(); echo $content2; // The quick brown fox Jumps over the lazy dog. như gợi ý ta thấy mọi kết xuất từ khi ob_start(); đến ob_clean(); đều được hàm ob_get_contents(); lưu vào biến $content. Cơ chế cache là gì? => Việc query tới DataBase sẽ tốn rất nhiều thời gian, thêm
nữa dữ liệu Response thường to, đây chính là lý do sử dụng cho ứng dụng của ta chậm đi. 1. Cache toàn bộ page: Nguyên cả page ứng với url nhất định được lưu vào cache, các truy cập kế tiếp đến cùng url này sẽ include ngay lập tức file cache được xây dựng trước đó, do vậy sẽ giảm tối đa về thời gian do server không hề giải quyết gì cả (kể cả truy cập DataBase). cách này đơn giản nhưng k linh hoạt, và khó thực thi vì dữ liệu trên các trang là dữ liệu động.
xem thêm tự động download ảnh từ website không giống 2. Cache từng phần của page: Ta sẽ chỉ cache một phần của page mà tại đó dữ liệu ít bị refresh. Điều này đảm bảo client sẽ nhận được dữ liệu trả về là chuẩn xác mà chẳng phải dữ liệu cũ từ file cache. 3. Cache SQL: Khi cùng câu lệnh SQL được gọi đi gọi lại, thì chỉ lệnh trước hết được send đến DataBase server, trong các Framework đều có cache SQL. Để khởi đầu thì ta phải tạo một thư mục cache để chứa các file cache cho áp dụng của ta, không lên để các file cache lung tung, tránh cache file k được CHMOD đúng quyền read & write. vì thế để dễ chmod và
bảo mật ta cần tạo riêng thư mục cache, việc đặt cache key cũng cần để ý để easy phân biệt. ví dụ sau sẽ xây dựng cache file $cacheFile có nghĩa vụ như sau: Cứ giống như vậy, tiến trình lập đi lập lại. $cacheFile = 'cache/name_file_cache.php'; $time_update_cache = 600; // milisecond(s) // rà soát cache file tồn tại và đang đến lúc cập nhật lại cache file hay chưa? if ( (file_exists($cacheFile)) && (time() <= (fileatime($cacheFile) + $time_update_cache) )) // Nếu thỏa thì đọc nội dung trong cache file 1 cách nhanh chóng $content = file_get_contents($cacheFile); // Xuất kết quả echo $content; else // update cache file ob_start(); // Chỗ này có thể truy vấn Database và xuất ra ngay kết quả // => tất cả đều lưu vào biến $content echo ' Hello world lớn cache‘; echo ‘ Hieu.dev – e-web.vn‘; $content = ob_get_contents(); ob_end_clean(); // Ghi cache file file_put_contents($cacheFile,$content); // Xuất kết quả echo $content; Một gợi ý khác, cache dữ liệu SQL: // text file cache $file = 'sql_cache.html'; $expire = 86400; // 24 hours // Nếu có cache file và còn trong thời gian chưa hết $expire if (file_exists($file) && filemtime($file) > (time() - $expire)) // Uunserialize data từ cache file $records = unserialize(file_get_contents($file)); else // update cache file $link = mysql_connect('localhost','username','password') or die (mysql_error()); mysql_select_db('shop') or die (mysql_error()); /* form SQL query */ $query = "SELECT * FROM categories"; $result = mysql_query($query) or die (mysql_error()); while ($record = mysql_fetch_array($result) ) $records[] = $record; // Serialize data và push vào cache file $OUTPUT = serialize($records); $fp = fopen($file,"w"); fputs($fp, $OUTPUT); fclose($fp); // end else // Query results are in $records array foreach ($records as $id=>$row) if ($row['category_id'] == $_REQUEST['category_id']) // Loại sản phẩm đã được lưu trong cache file echo $row['category_name']; else // Loại sản phẩm mới, chưa được lưu trong cache file // Lúc này ta kiểm tra trong Database xem có loại sản phẩm này hay ko? // Nếu có thì thực hiện cập nhật lại cache file // Nếu không thì thông báo lỗi không tìm thấy echo $row['category_name']; // end foreach sql_cache.html sẽ có dạng: a:1:i:0;a:6:i:0;s:1:"1";s:11:"category_id";s:1:"1";i:1;s:9:"Computers";s:13:"category_name";s:9:
"Computers" ;i:2;s:25:"Description for computers";s:20:"category_description"
;s:25:"Description for computers"; giải thích thêm: unserialize() là hàm ngược với serialize(). Serialize() có chức năng mã hóa 1 phân khúc, hay kiểu dữ liệu nào đó thành dạng giống như nội dung sql_cache.html ở trên. Unserialize() sẽ biến nội dung mã hóa thành chính object mà trước khi ta serialize(). nhìn thấy thêm hướng dẫn giải quyết lỗi Remove slug custom bài viết type error! Với gợi ý trên thì ta thấy cache file được xem rất rõ, những data nào ít được cập nhật ta nên dùng cơ chế cache để load giúp PHP load nhanh hơn. Tùy từng trường hợp mà bạn dùng cache cho đúng. Nguồn: https://e-web.vn/ |