Thứ Hai, 20 tháng 7, 2026

include, require, include_once và require_once khác nhau thế nào? (Bốn anh em nhìn giống nhau... nhưng nhầm một cái là website "toang" ngay.)

Bạn đã bao giờ lái một chiếc xe Toyota Camry với chỉ 1 bánh xe? Chắc chắn là không rồi!

Có một giai đoạn.

Mà lập trình viên PHP nào cũng trải qua.

Bạn bắt đầu chia project thành nhiều file.

😄

Không còn một file:

index.php

dài 5.000 dòng nữa.

Thay vào đó.

Bạn tạo:

config.php

header.php

footer.php

database.php

menu.php

Rồi trong index.php.

Bạn viết:

include "header.php";

Website chạy.

😎

Hôm sau.

Bạn đổi thành:

require "header.php";

Website vẫn chạy.

😄

Bạn lại thấy trên Internet có:

include_once

và:

require_once

🤔

Lúc này.

Đầu bắt đầu quay.

"Ủa... bốn cái này khác nhau chỗ nào?"

"Sao PHP thích làm khó người mới vậy?"

😅

Thật ra.

PHP không làm khó.

Nó chỉ cho bạn...

4 cách "mời" một file khác vào chương trình.


include, require, include_once và require_once là gì?

Đây là bốn câu lệnh trong PHP dùng để nạp (include) nội dung của một file vào file hiện tại.

Khác biệt nằm ở hai điểm:

  • Nếu file bị thiếu thì chương trình có dừng hay không.
  • File có được nạp nhiều lần hay chỉ một lần.



Ví dụ đời thường 🍜

Bạn đang nấu mì.

😄

Muốn có:

Trứng.

Rau.

Xúc xích.

Bạn phải lấy từng nguyên liệu từ tủ lạnh.

Project PHP cũng vậy.

Muốn có:

Database.

Header.

Menu.

Footer.

...

Bạn phải "lấy" từng file vào.

Đó chính là:

include

require

include hoạt động thế nào?

Ví dụ.

include "header.php";

PHP sẽ:

Mở file.

Đọc nội dung.

Chèn vào đúng vị trí đó.

Giống như bạn copy-paste cả file.


Nếu file không tồn tại?

Ví dụ.

include "abc.php";

PHP báo:

Warning.

😄

Nhưng.

Chương trình vẫn chạy tiếp.

Ví dụ.

include "abc.php";

echo "Website vẫn chạy";

Bạn vẫn thấy:

Website vẫn chạy

require thì sao?

require "config.php";

Nếu file tồn tại.

Mọi thứ bình thường.

Nếu file không tồn tại.

Fatal Error.

Website dừng luôn.

😭


Ví dụ đời thường 😄

include giống như:

Bạn định pha cà phê.

Không có đường.

😅

Thôi.

Uống cà phê đắng.

Vẫn được.

require giống như:

Bạn định lái xe.

Không có bánh xe.

🤡

Thì...

Không thể đi tiếp.


Khi nào nên dùng require?

Ví dụ.

File:

database.php

Nếu thiếu.

Website gần như không thể hoạt động.

Nên dùng:

require "database.php";

Tương tự.

Các file:

config.php

autoload.php

functions.php

thường cũng dùng:

require


Khi nào nên dùng include?

Ví dụ.

sidebar.php

Hoặc.

banner.php

Thiếu cũng không quá nghiêm trọng.

Có thể dùng:

include

Website vẫn hoạt động.

Chỉ thiếu một phần giao diện.


include_once là gì?

Đây là phiên bản "thông minh" hơn.

😄

Ví dụ.

Bạn viết:

include_once "config.php";

Nếu file đã được nạp.

PHP sẽ bỏ qua.

Không nạp lần thứ hai.


require_once cũng vậy

require_once "database.php";

Nếu file đã có.

Không đọc lại.

Nếu chưa có.

Đọc vào.

Nếu không tìm thấy.

Fatal Error.


Vì sao phải có _once? 🤔

Đây là lỗi rất hay gặp.

Ví dụ.

File:

functions.php

Có:

function hello()
{
}

Bạn:

include "functions.php";

include "functions.php";

PHP báo:

Cannot redeclare function hello()

😭

Vì.

Hàm bị khai báo hai lần.


require_once cứu bạn 😄

Chỉ cần đổi thành:

require_once "functions.php";

Dù gọi nhiều lần.

PHP chỉ nạp:

Một lần.

Xong.


InfinityFree Case 😅

Có bạn gửi project.

Trang chủ.

OK.

😄

Trang sản phẩm.

Fatal Error.

Sau khoảng:

5 phút.

Mình phát hiện.

File:

functions.php

được:

include

ở:

Header.

Menu.

Footer.

Và.

Index.

🤡

Kết quả.

Một hàm bị khai báo:

4 lần.

Đổi sang:

require_once

Website chạy ngay.


Một hiểu lầm rất phổ biến 🤡

Nhiều người nghĩ.

Cứ dùng:

include

cho mọi thứ.

Không.

😄

Hãy tự hỏi:

"Nếu thiếu file này.

Website có còn chạy được không?"

Nếu:

Không.

Dùng:

require

Nếu:

Có.

Dùng:

include

Nên dùng cái nào nhiều nhất?

Nếu hỏi mình.

Trong project PHP hiện đại.

Mình thường dùng:

require_once

😄

Vì:

✔ Quan trọng

✔ Không bị include trùng

✔ An toàn

Rất nhiều framework.

Thư viện.

CMS.

Cũng có cách tiếp cận tương tự.


Debug kiểu dev thật 😎

✅ 1. File cấu hình nên dùng require_once

Ví dụ.

Database.

Config.

Functions.

✅ 2. Đừng include cùng một file nhiều lần

Đặc biệt khi file có:

Function.

Class.

Constant.

✅ 3. Đọc kỹ thông báo lỗi

Nếu thấy:

Cannot redeclare...

Hãy nghĩ ngay.

Include trùng.

✅ 4. Tổ chức project rõ ràng

Đừng để:

config.php

xuất hiện ở 10 nơi khác nhau.


Checklist chuẩn không cần chỉnh 😎

☑ include: thiếu file vẫn chạy

☑ require: thiếu file dừng chương trình

☑ include_once: chỉ nạp một lần

☑ require_once: vừa bắt buộc vừa chỉ nạp một lần

☑ File cấu hình nên dùng require_once

☑ Tránh include trùng file chứa function hoặc class


FAQ nhanh

include và require khác nhau thế nào?

→ include báo Warning và chương trình vẫn chạy.

→ require báo Fatal Error và dừng chương trình.

include_once có chậm hơn include không?

→ Khác biệt rất nhỏ và thường không đáng kể trong đa số project.

Có nên dùng require_once cho mọi project mới?

→ Với các file cấu hình, thư viện hoặc hàm dùng chung thì đây là lựa chọn rất phổ biến.

Vì sao báo "Cannot redeclare function"?

→ Thường do cùng một file chứa hàm bị include nhiều lần.


Bạn có thể cũng đang gặp 😭

👉 localhost vs hosting khác nhau thế nào?

👉 Vì sao Windows chạy nhưng Linux host chết?

👉 UTF-8 và bi kịch tiếng Việt bị lỗi font

👉 Header already sent là gì?

👉 Call to undefined function là gì?

👉 Fatal Error trong PHP là gì?

👉 Parse Error là gì?

👉 Cache là gì? (Vì sao sửa code rồi mà website vẫn không thay đổi?)

👉 Comment code đúng cách để khỏi tự giết mình


Tổng kết

Nếu ví project PHP là một bộ phim.

Thì mỗi file.

Là một diễn viên.

😄

include

giống như:

"Diễn viên bận thì thôi.

Phim vẫn quay."

require

lại giống như:

"Thiếu diễn viên chính.

Ngừng quay!"

Còn:

include_once

require_once

thì giống như đạo diễn nói:



Gợi ý nhỏ

"Mỗi diễn viên chỉ cần xuất hiện một lần."

Không ai muốn cùng một nhân vật bước vào sân khấu...

4 lần liên tiếp.

🤡

Và nếu bạn chỉ nhớ một điều từ bài này, hãy nhớ:

Hãy dùng require_once cho những file quan trọng như config.php, database.phpfunctions.php.

Nó giúp project ổn định hơn và tránh được rất nhiều lỗi khó chịu khi code ngày càng lớn. 🚀