Thứ Sáu, 17 tháng 7, 2026

Vì sao Windows chạy nhưng Linux host chết? (Máy ở nhà chạy ngon, upload lên host Linux thì... "không tìm thấy file".)

Bạn là người ham học hỏi, thường xuyên "ra tay nghĩa hiệp" khắc phục những lỗi thông thường của các máy tính Dell, HP của bạn bè, anh chị em trong nhà...Một ngày đẹp trời, một người bạn đưa cho bạn một con iMac 24" nhờ bạn "phẫu thuật". Bạn ngơ ngác nhìn con iMac...vừa lạ vừa quen...không biết phải bắt đầu từ đâu?!

Có một câu chuyện.

Mà gần như ai học PHP cũng từng gặp.

Ở nhà.

Dùng:

✔ XAMPP

✔ Laragon

✔ WAMP

Website chạy ngon.

😎

Upload lên InfinityFree.

...

Trang trắng.

😭

Hoặc.

Warning: Failed to open stream...

Fatal error: Failed opening required...

Hoặc.

404 Not Found

Hoặc.

Ảnh biến mất.

CSS biến mất.

JavaScript biến mất.

🤡

Bạn bắt đầu nghĩ.

"Host lỗi."

"PHP lỗi."

"Linux khó tính."

😅

Thực ra...

Linux không hề khó tính.

Nó chỉ...

Làm đúng những gì bạn viết.

😄


Vì sao Windows chạy nhưng Linux lại lỗi?

Phần lớn máy tính cá nhân chạy Windows, trong khi đa số hosting sử dụng Linux.

Hai hệ điều hành này có nhiều khác biệt như:

  • Phân biệt chữ hoa và chữ thường trong tên file
  • Đường dẫn thư mục
  • Quyền truy cập (Permissions)
  • Ký tự xuống dòng
  • Cấu hình môi trường

Đây là nguyên nhân khiến website chạy tốt trên Windows nhưng gặp lỗi sau khi upload lên hosting Linux.



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

Bạn có hai người bạn.

Một người rất "dễ tính".

😄

Bạn viết:

Nam.

NAM.

nam.

NaM.

...

Người đó đều vui vẻ.

Một người khác.

Rất nguyên tắc.

😎

Bạn viết:

Nam.

Đúng.

Bạn viết:

NAM.

Không ...vui.

Linux chính là người thứ hai.


Khác biệt số 1: Chữ hoa và chữ thường 😭

Đây là lỗi số một.

Ví dụ.

Tên file thật là:

config.php

Nhưng bạn viết:

include "Config.php";

Windows.

😄

"Ờ.

Ý nó là config.php."

Chạy.

Linux.

😎

"Không.

Config.php không tồn tại."

Lỗi.

Đây là lỗi phổ biến nhất.


Thêm một ví dụ 😅

Thư mục thật:

images

Code:

<img src="Images/logo.png">

Windows.

Hiện ảnh.

😄

Linux.


😭

Chỉ khác.

Một chữ:

I

viết hoa.


Khác biệt số 2: Dấu gạch chéo

Windows quen dùng:

\

Ví dụ.

C:\xampp\htdocs

Linux dùng:

/

Ví dụ.

/home/public_html

Trong PHP.

Nên dùng:

include "config/database.php";

Thay vì cố ghép đường dẫn theo kiểu Windows.


Khác biệt số 3: File Permissions 🔒

Windows.

Bạn gần như có toàn quyền.

😄

Linux.

Không.

Ví dụ.

PHP muốn ghi file.

file_put_contents(...)

Hosting trả lời.

Permission denied

😭

Không phải code sai.

Mà thư mục chưa được cấp quyền ghi.


Khác biệt số 4: Thực thi file

Ở Windows.

Một số file.

Có thể chạy ngay.

Linux.

Muốn chạy.

Phải có quyền:

Executable

Điều này thường gặp khi làm việc với:

Shell Script

Python

Node.js

Cron Job


Khác biệt số 5: Ký tự xuống dòng

Đây là lỗi ít gặp hơn.

Windows dùng:

CRLF

Linux dùng:

LF

Đa số IDE hiện nay xử lý tốt.

Nhưng đôi khi.

Một số script.

Hoặc shell file.

Có thể lỗi chỉ vì khác ký tự xuống dòng.


InfinityFree Case 😅

Có bạn gửi mình project.

Trang chủ chạy.

😄

Nhưng.

Trang đăng nhập.


Sau khoảng:

3 phút.

Mình phát hiện.

Tên file thật.

Login.php

Link.

login.php

Windows.

Không sao.

Linux.

Không tha.

🤡

Đổi đúng tên.

Website chạy ngay.


Composer và Autoload

Nếu sau này học Laravel.

Hoặc Composer.

Bạn sẽ càng thấy rõ.

Ví dụ.

Class tên:

UserController

Nhưng file:

usercontroller.php

Windows.

Có thể vẫn chạy.

Linux.

Rất dễ lỗi.

Cho nên.

Ngay từ bây giờ.

Hãy tập đặt tên thật nhất quán.


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

Nhiều người nghĩ.

Linux khó.

Không.

😄

Linux chỉ nghiêm túc hơn.

Windows thường:

"Cũng được."

Linux:

"Không đúng.

Là không chạy."

Và điều thú vị là.

Nhờ sự "khó tính" đó.

Bạn sẽ viết code chuẩn hơn.


Một mẹo cực hay 😎

Trước khi upload.

Hãy kiểm tra:

✔ Có file nào viết sai chữ hoa không?

✔ Có include sai tên file không?

✔ Có dùng đường dẫn Windows không?

✔ Có thư mục cần quyền ghi không?

Làm được bốn điều này.

Bạn sẽ tránh được rất nhiều lỗi.


Debug kiểu dev thật 😎

✅ 1. Đặt tên file nhất quán

Ví dụ.

Toàn bộ dùng:

login.php

Hoặc.

LoginController.php

Đừng lúc hoa.

Lúc thường.

✅ 2. Kiểm tra từng include

Sai một ký tự.

Linux cũng không bỏ qua.

✅ 3. Đọc Error Log

Linux thường báo rất rõ.

Thiếu file nào.

Sai đường dẫn nào.

✅ 4. Không hard-code đường dẫn Windows

Hãy dùng đường dẫn tương đối hoặc hằng số phù hợp.

✅ 5. Test trên hosting sớm

Đừng đợi viết xong 5.000 dòng mới upload.

😄


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

☑ Kiểm tra chữ hoa/chữ thường

☑ Kiểm tra đường dẫn

☑ Kiểm tra quyền ghi file

☑ Đọc Error Log

☑ Đặt tên file thống nhất

☑ Upload và test thường xuyên


FAQ nhanh

Vì sao Windows chạy mà Linux lỗi?

→ Vì Windows thường không phân biệt chữ hoa/chữ thường trong tên file, còn Linux thì có.

Linux có tốt hơn Windows để chạy web không?

→ Phần lớn hosting hiện nay sử dụng Linux vì ổn định, phổ biến và phù hợp với nhiều web server.

Có nên đổi hết tên file sang chữ thường?

→ Đây là thói quen rất tốt để giảm nhầm lẫn.

InfinityFree dùng Windows hay Linux?

→ InfinityFree sử dụng máy chủ Linux, nên các quy tắc về phân biệt chữ hoa/chữ thường đều được áp dụng.


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

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

👉 White Screen of Death – Trang trắng xóa không báo lỗi

👉 Fatal Error trong PHP là gì?

👉 Parse Error là gì?

👉 Call to undefined function là gì?

👉 Header already sent là gì?

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

👉 Session vs Cookie - Hai anh em dễ nhầm nhất của PHP

👉 Backup database đúng cách trước khi "toang"


Tổng kết

Windows giống như một người thầy rất hiền.

Bạn viết sai một chút.

Thầy vẫn hiểu.

Vẫn cho qua.

😄

Linux thì khác.

Nó giống như giám khảo trong phòng thi.

Đề ghi:

config.php

Bạn nộp:

Config.php

Sai.

Không có điểm thưởng.

Không có "thông cảm".

Ban đầu.

Điều này khiến rất nhiều người khó chịu.

Nhưng sau một thời gian.

Bạn sẽ nhận ra.

Chính sự "khó tính" của Linux giúp bạn hình thành những thói quen lập trình tốt hơn:

Đặt tên file nhất quán.

Viết đường dẫn chính xác.

Không phụ thuộc vào "máy mình chạy".

Đó cũng là lý do vì sao phần lớn website trên Internet đều chạy trên Linux.

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

Nếu code chỉ chạy trên máy bạn... thì đó chưa phải là code tốt.

Code tốt là code chạy đúng trên mọi môi trường chuẩn. 🚀