Chuyển file PHP thành file tĩnh HTML để cải thiện tốc độ với câu lệnh fopen và fwirte

Khi chúng ta tạo các ứng dụng PHP động để xử lý thì có một vấn đề là dù mã tốt đi chăng nữa, với số lượng truy cập lớn hoặc máy chủ yếu vì không đủ tiền thuê có khả năng vấn đề hiệu suất, tốc độ sẽ phát sinh. Một trường hợp điển hình nữa đó là ứng dụng PHP có hàm xử lý phức tạp, dẫn đến thời gian xử lý lâu dù chúng ta đã chịu khó đầu tư thêm ít nhiều.

Khi đó giải pháp khác giải quyết tương đối tốt đó là bạn xuất kết quả PHP trả về thành file dạng HTML, tất nhiên cái này sẽ hiệu quả nhất khi chúng ta biết trước được kết quả trả về hay nói cách khác là lường trước được đầu vào cần tính toán, do đó chúng ta sẽ tạo sẵn được kết quả, và chỉ cần chờ người dùng nhập truy vấn phù hợp là chuyển hướng về trang html kết quả đã có sẵn.

Ví dụ, khi tôi tạo ứng dụng gợi ý tên hay cho con bằng PHP, tôi đã lường trước được phần đa các dữ liệu mà người dùng có thể nhập, căn cứ trên danh sách các tên namtên nữ phổ biến, cũng như các họ thường gặp Việt Nam. Do vậy tôi sẽ tạo sẵn được các kết quả phù hợp mà nếu xử lý hoàn toàn bằng PHP e sẽ nặng nề.

Ở cấp độ cao bạn có thể biến một ứng dụng PHP thành một ứng dụng chỉ cần đến các tài nguyên tĩnh như HTML, CSS và JS, nhưng khi đó chúng ta phải cải thiện kỹ năng JS lên rất nhiều để sử dụng các lệnh JS thay cho PHP. Còn nếu chưa đạt đến cấp độ này (tôi cũng đang thế thôi), thì thường chúng ta sẽ vẫn phải sử dụng chút ít PHP cho một số tác vụ.

OK, giờ chúng ta quay ra vấn đề chính. Ví dụ để tạo file HTML có tên freehost-page.html tôi làm như sau:

$myfile = fopen("freehost-page.html", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile);

Giải thích:

  • fopen dùng để tạo file freehost-page.html nếu file đó chưa tồn tại, nếu tồn tại rồi thì dùng nó để mở file;
  • fwrite dùng để ghi nội dung file, trong đó, $txt là nội dung cần ghi vào file;
  • fclose nghĩa là ghi xong rồi thì đóng file đó lại;

Phần tên file thường sẽ là yếu tố động phụ thuộc vào dữ liệu đầu vào. Còn $txt dĩ nhiên là dạng dữ liệu html, và trong này sẽ là kết quả mà chúng ta cần show ra. Đối với những cái phức tạp, bạn có thể cần tạo một số hàm thay vì tạo nội dung đầy đủ cho nó thông qua các câu lệnh PHP dài dòng, vì có thể sẽ dễ bị lỗi hơn nếu viết một lèo như vậy.

Chú ý là nên để ý các yếu tố động ở phần header khi tạo trang html, ví dụ như tên trang, phần mô tả cho thẻ meta,…Nếu không chú ý đến phần này bạn có thể tạo ra rất nhiều trang có phần mô tả giống hệt nhau, và điều này chắc chắn sẽ ảnh hưởng không tốt đến SEO.

Bạn cũng cần để ý đến cả dấu ” và ‘ nữa. Trong file html nếu đã dùng dấu ” cho các thuộc tính thì giờ bạn cần dùng dấu ‘ trong PHP để chỉ một chuỗi text mà bạn cần nối hoặc ghi vào file.

File HTML được tạo ra sẽ ở cùng cấp với file PHP được dùng để tạo file html đó, do vậy nếu có rất nhiều file html cần tạo, bạn nên tạo một thư mục riêng cho nó thay vì để cùng cấp với index, vì điều đó sẽ làm ứng dụng của bạn trông rất rối, cồng kềnh.