Nếu bạn mới học PHP, sớm hay muộn cũng sẽ trải qua khoảnh khắc này:
Localhost: Hoạt động hoàn hảo
↓
Upload host
↓
Website chết
Lúc đó bạn bắt đầu:
- Kiểm tra lại code
- Kiểm tra lại database
- Kiểm tra lại cuộc đời
Nhưng đừng lo.
Trong phần lớn trường hợp, vấn đề không nằm ở code.
Mà nằm ở môi trường host.
Bài viết này tổng hợp 50 lỗi phổ biến nhất khi upload website PHP lên host thật, đặc biệt là InfinityFree và các shared hosting giá rẻ.
Phần 1 – Upload xong trang trắng
1. White Screen of Death
Trang trắng tinh.
Không báo lỗi.
Không báo gì.
Chỉ có sự im lặng.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: White Screen of Death – Trang trắng xóa không báo lỗi
2. Fatal Error bị ẩn
Host tắt hiển thị lỗi.
Bạn tưởng website chết.
Thực ra PHP đang la hét phía sau.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: Fatal Error là gì? - Khi PHP quyết định: "Thôi nghỉ chơi luôn"
3. Parse Error
Thiếu dấu:
;
hoặc
}Parse Error là gì? Thiếu dấu ; và "Bi kịch của nhân loại"
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài:
4. Include sai file
Ví dụ:
include('config.php');
nhưng file không tồn tại.
5. Require sai file
Require còn "khó tính" hơn include.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: Include và Require trong PHP khác nhau thế nào? Nhìn giống nhau, nhưng lúc lỗi thì "tính cách" khác hẳn
6. Upload thiếu file
Rất nhiều người upload:
index.php
nhưng quên:
config.php
7. Sai tên file do phân biệt hoa thường
Windows:
Config.php
config.php
gần như giống nhau.
Linux:
Không.
8. Sai phiên bản PHP
Host dùng:
PHP 8.2
Code viết cho:
PHP 5.6
9. Extension bị thiếu
Ví dụ:
curl
gd
mbstring
10. Memory Limit
Website dùng quá nhiều RAM.
Phần 2 – Database không hoạt động
11. Sai hostname
Trên localhost:
localhost
Trên host:
Không phải lúc nào cũng vậy.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: Không kết nối được Database sau khi Upload Host – trên máy chạy ngon, lên host thì "tắt điện"
12. Sai username
InfinityFree thường tạo username rất dài.
13. Sai password
Lỗi kinh điển.
14. Sai database name
Người mới rất hay nhầm.
15. Import database thất bại
File SQL quá lớn.
16. Quên tạo database
Nghe buồn cười.
Nhưng rất phổ biến.
17. Query chạy nhưng không có dữ liệu
Thường do:
WHERE
không khớp.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: Query chạy nhưng không có dữ liệu – cảm giác như đi câu cả ngày mà không được con cá nào
18. INSERT không chạy
Không kiểm tra lỗi SQL.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: MySQL INSERT không chạy (không báo lỗi) – cảm giác bất lực rất "khó tả"
19. UPDATE không hoạt động
Sai điều kiện.
20. Kết nối nhầm database
Website đang đọc database khác.
Phần 3 – Form không hoạt động
21. POST không nhận dữ liệu
22. GET không nhận dữ liệu
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: PHP không nhận dữ liệu từ form? (POST/GET bị rỗng) – lỗi nhỏ nhưng đủ "hành" bạn cả buổi
23. Thiếu thuộc tính name
<input type="text">
24. Sai action
Form gửi nhầm trang.
25. Sai method
POST nhưng code lại đọc GET.
26. Upload file thất bại
Sai cấu hình.
27. Giới hạn dung lượng upload
Host miễn phí thường giới hạn.
28. Sai thư mục upload
29. Không có quyền ghi file
30. Form hoạt động local nhưng chết trên host
Rất hay gặp.
Phần 4 – Session và Login
31. Quên session_start()
Nhà vô địch mọi thời đại.
Nếu muốn tìm hiểu chi tiết hơn, bạn có thể xem bài: Session không hoạt động trong PHP? Login thành công nhưng vẫn bị "đá ra ngoài"
32. Login đúng password nhưng vẫn fail
33. Hash password không khớp
34. Khoảng trắng vô hình
Ví dụ:
trim()
bị bỏ quên.
35. Session biến mất
36. Cookie bị chặn
37. Header Already Sent
Lỗi huyền thoại.
38. Redirect không hoạt động
39. Logout không thành công
40. Session cũ vẫn còn
Phần 5 – InfinityFree Edition 😄
41. mail() không gửi được
Một trong những cú sốc đầu đời.
42. SMTP cấu hình sai
43. Cron Job bị hạn chế
44. URL Rewrite không hoạt động
45. Cache làm bạn tưởng code chưa cập nhật
46. Thay code rồi nhưng website vẫn như cũ
InfinityFree từng khiến không ít người hoang mang vì chuyện này.
47. File upload thành công nhưng không hiển thị
Sai đường dẫn.
48. Đường dẫn tuyệt đối bị sai
Localhost:
C:\xampp\htdocs
Host:
Không tồn tại.
49. Website chạy rất chậm
Không hẳn do code.
Đôi khi chỉ vì đang dùng host miễn phí.
50. Tin rằng mọi lỗi đều do PHP
Sai.
Nhiều khi:
- Host lỗi
- Database lỗi
- DNS lỗi
- Cache lỗi
- Trình duyệt lỗi
PHP hoàn toàn vô tội.
Checklist cứu mạng trước khi hoảng loạn
Khi website vừa upload lên host và không chạy:
Bước 1
Kiểm tra:
error_reporting(E_ALL);
ini_set('display_errors',1);
Bước 2
Kiểm tra:
var_dump();
Bước 3
Kiểm tra database.
Bước 4
Kiểm tra đường dẫn.
Bước 5
Kiểm tra phiên bản PHP.
Bước 6
Kiểm tra file đã upload đủ chưa.
Bước 7
Uống nước.
Đi bộ 5 phút.
Quay lại.
Rất nhiều lỗi được tìm ra theo cách này. 😄
Kết luận
Nếu code chạy trên localhost nhưng chết trên host thật, đừng vội kết luận:
"Mình không hợp với lập trình."
Thực tế gần như mọi lập trình viên PHP đều từng trải qua cảm giác:
Localhost: 100 điểm
Host thật: 0 điểm
Đó không phải thất bại.
Đó là nghi thức trưởng thành.
Và tin vui là:
Khoảng 90% lỗi khi upload website PHP lên host thật đều nằm trong danh sách ở trên.
Nếu bình tĩnh kiểm tra từng bước, bạn sẽ ngạc nhiên vì số lần nguyên nhân thật sự lại là một chi tiết nhỏ xíu mà mình đã bỏ qua từ đầu.