Kinh nghiệm lập trình website mã nguồn mở PHP

Bắt đầu xây dựng Framework – Loạt bài Tự xây dựng PHP Framework

Bắt đầu xây dựng Framework – Loạt bài Tự xây dựng PHP Framework
Bài viết này thuộc Chương 1 – Giới thiệu khái niệm MVC và cài đặt môi trường làm việc, trong loạt bài: Tự xây dựng PHP Framework.
Trong bài này, ta sẽ tạo ra cấu trúc thư mục cho Framework và cấu hình Web server.
Nội dung gồm 8 chương, 66 video
Ngôn ngữ sử dụng: tiếng anh
Cuối mỗi video sẽ có phần tổng kết, tóm tắt bài học bằng tiếng Việt và source code để các bạn kham khảo.

Video

Tổng kết

Cấu trúc thư mục

Hôm nay ta sẽ bắt tay vào tạo thư mục, Framework của chúng ta sẽ có cấu trúc như sau:

Trong đó

  • App: nơi đặt mô hình MVC, toàn bộ chức năng chính của website sẽ đặt tại đây
  • Core: những thư viện quan trọng, tái sử dụng nhiều lần, ví dụ như class để kết nối MySQL, class phân trang…
  • logs: ta sẽ đặt error log tại đây, khi có lỗi dễ dàng tra cứu
  • public: Là nơi duy nhất trình duyệt và người dùng truy cập được, ta sẽ cấu hình để ngăn người dùng truy cập vào các thư mục quan trọng vì lý do bảo mật.
  • vendor: Cũng là 1 thư mục chứa thư viện, nhưng đây là thư viện bên ngoài, được xây dựng sẵn từ cộng đồng, ta sẽ không chỉnh sửa gì trong này cả

Tuyệt vời phải không? Nhìn vào cấu trúc thư mục, ta thấy nó đơn giản dễ hiểu nhưng cũng đầy đủ, và cũng khá đẹp nếu so với ứng dụng web không theo cấu trúc. Tạm thời như vậy đã, sau này ta sẽ nâng cấp lên để framework của chúng ta còn mạnh mẽ, linh hoạt hơn nữa.

Cấu hình thư mục public

Khi truy cập http://localhost/, thay vì cho người dùng truy cập vào thư mục gốc của ứng dụng (root), ta sẽ cho người dùng truy cập vào thư mục public, đó cũng là nơi để thư mục images, js, css… Những thứ người dùng xem được, ngoài ra phải ẩn giấu tất cả các thư mục khác.
Mục tiêu các đường dẫn của ứng dụng sẽ có dạng:

http://localhost/css/styles.css
http://localhost/js/script.js
http://localhost/images/logo.jpg

Thay vì ứng dụng kém bảo mật như:

http://namluu.com/wp-content/themes/namblog17/css/font-awesome.min.css

Á à cậu này dùng WordPress này, theme tên là namblog17 này, tìm kiếm lỗ hổng của WordPress với cái theme như vậy nào!

https://www.lotte.vn/static/version1504226814/frontend/SM/Lottevec/vi_VN/css/styles-l.css

Ái chu choa, chú này dùng Magento2 này, SM có thể là công ty SmartOSC, một trong số các công ty làm Magento 2 lớn ở Việt Nam hiện nay. Quả nhiên qua tìm hiểu thì đúng là SmartOSC làm web lotte.vn thật, và nếu đối thủ cạnh tranh bắt cóc, tra tấn dev của công ty này để tìm lỗ hổng bảo mật thì Lotte nguy to.

Các bạn thấy đó, việc để lộ các đường link như vậy chỉ có hại chứ chẳng được gì phải không?
Trong video, trainer hướng dẫn cấu hình trong tập tin httpd.conf. bạn nào cài XAMPP như mình sẽ tìm thấy nó tại:
(ổ cứng bạn cài XAMPP, C hoặc D) D:\xampp\apache\conf\httpd.conf
Nếu bạn dùng virtualhost thì cấu hình trong httpd-vhosts.conf
DocumentRoot thay vì trỏ vào thư mục root thì ta chỉ cần thêm đuôi /public

Ngoài ra mình còn giới thiệu thêm 1 cách nữa là dùng .htaccess không cần cấu hình web server
Tạo 1 file .htaccess để ngoài thư mục web root như sau:
/.htaccess

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>

Nội dung file này sẽ điều hướng tới thư mục public khi truy cập http://localhost/
Tạo thêm 1 file .htaccess để trong thư mục public:
/public/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?$1 [L,QSA]
</IfModule>

Nội dung là mặc định chạy file index.php trong thư mục public khi truy cập vào http://localhost/
Thử xem khi truy cập http://localhost/ và xuất ra nội dung trong public/index.php là bạn đã thành công
Nếu có thắc mắc gì vui lòng để lại comment nhé


Source code của bài này (chỉ gồm cấu trúc thư mục và 2 file htaccess)
bạn có thể thực hành 2 file htaccess bằng cách thử bỏ chúng đi để xem sự khác biệt.
https://github.com/namluu/myfw/releases/tag/1.0.0

Bài tiếp theo: Chương 2, Routing. Bài đầu tiên: kỹ thuật entry point với front controller
rất thú vị, mời các bạn đón xem

Mục lục loạt bài Tự xây dựng PHP Framework

Bắt đầu xây dựng Framework – Loạt bài Tự xây dựng PHP Framework
Đánh giá bài viết

Gửi phản hồi

Your email address will not be published. Required fields are marked *