Tổng hợp các lỗi PHP thường gặp và cách khắc phục

Tổng hợp các lỗi PHP thường gặp và cách khắc phục

Tổng hợp những lỗi PHP thường gặp từ cú pháp, biến, session, file, MySQL đến Composer cùng nguyên nhân và cách khắc phục chi tiết, dễ hiểu, giúp lập trình viên debug nhanh và viết mã ổn định hơn, chi tiết như nào hãy cùng chúng tôi phân tích:

Trong quá trình phát triển ứng dụng PHP, việc gặp lỗi là điều không thể tránh khỏi. Từ những lỗi cú pháp đơn giản cho đến các vấn đề liên quan đến kết nối cơ sở dữ liệu, cấu hình máy chủ hay hiệu suất, mỗi lỗi đều có thể khiến website hoạt động không như mong muốn. Điều quan trọng không phải là tránh hoàn toàn lỗi, mà là biết cách nhận diện nguyên nhân, đọc thông báo lỗi và xử lý một cách chính xác.

Bài viết này được Web Mới tổng hợp dựa trên những tình huống thường xuyên xuất hiện trong quá trình lập trình và vận hành website PHP. Nội dung tập trung giải thích nguyên nhân, dấu hiệu nhận biết và hướng xử lý thực tế để giúp bạn tiết kiệm thời gian khi debug cũng như hạn chế lặp lại các lỗi tương tự.

Tổng hợp các lỗi PHP thường gặp và cách khắc phục

Vì sao cần hiểu rõ các lỗi trong PHP?

Nhiều lập trình viên mới thường cố gắng sửa lỗi bằng cách tìm kiếm đúng thông báo lỗi trên Internet rồi sao chép cách xử lý. Tuy nhiên, cùng một thông báo lỗi có thể xuất phát từ nhiều nguyên nhân khác nhau. Nếu chỉ sửa phần ngọn mà không hiểu bản chất, lỗi rất dễ tái diễn khi dự án mở rộng.

Việc hiểu rõ cơ chế hoạt động của PHP mang lại nhiều lợi ích:

  • Rút ngắn thời gian tìm nguyên nhân.
  • Hạn chế phát sinh lỗi dây chuyền.
  • Viết mã nguồn dễ bảo trì hơn.
  • Tăng tính ổn định và bảo mật cho website.
  • Nâng cao khả năng phân tích khi làm việc với dự án lớn.

Hiểu đúng về các cấp độ thông báo lỗi

Không phải mọi thông báo đều khiến chương trình dừng hoạt động. PHP chia lỗi thành nhiều mức độ khác nhau.

Loại Mức độ Ảnh hưởng
Notice Nhẹ Chương trình vẫn chạy nhưng nên sửa.
Warning Trung bình Một phần chức năng có thể không hoạt động.
Fatal Error Nghiêm trọng Script dừng ngay lập tức.
Parse Error Rất nghiêm trọng PHP không thể biên dịch tập tin.
Deprecated Cảnh báo Tính năng sắp bị loại bỏ ở các phiên bản mới.

Các lỗi PHP xuất hiện nhiều nhất trong thực tế

Lỗi Parse Error (Syntax Error)

Đây là lỗi phổ biến nhất đối với người mới học PHP. Trình thông dịch không thể phân tích cú pháp nên chương trình không thể chạy.

Nguyên nhân thường gặp:

  • Thiếu dấu chấm phẩy.
  • Thiếu dấu ngoặc.
  • Đóng mở chuỗi sai.
  • Sai cấu trúc if, foreach hoặc function.

Ví dụ:

<?php
echo "Xin chào"
echo "Web Mới";
?>

Thông báo lỗi sẽ xuất hiện do thiếu dấu ; sau câu lệnh đầu tiên.

Cách khắc phục:

  • Sử dụng IDE có tính năng kiểm tra cú pháp.
  • Định dạng mã nguồn rõ ràng.
  • Kiểm tra dòng được PHP thông báo, đồng thời xem cả vài dòng phía trên.

Undefined Variable

Lỗi xảy ra khi biến được sử dụng trước khi được khai báo hoặc chưa có giá trị.

<?php
echo $username;
?>

PHP sẽ thông báo biến chưa tồn tại.

Khắc phục bằng cách khởi tạo giá trị trước khi sử dụng.

<?php
$username = "Admin";
echo $username;
?>

Ngoài ra có thể kiểm tra bằng isset() trước khi truy cập.

Undefined Index

Lỗi này thường xuất hiện khi làm việc với mảng hoặc dữ liệu từ biểu mẫu.

<?php
echo $_POST['email'];
?>

Nếu người dùng chưa gửi trường email thì PHP sẽ phát sinh thông báo.

Cách xử lý:

<?php
if (isset($_POST['email'])) {
    echo $_POST['email'];
}
?>

Đối với PHP 7 trở lên có thể sử dụng toán tử null coalescing.

<?php
$email = $_POST['email'] ?? '';
?>

Call to Undefined Function

Lỗi xuất hiện khi gọi một hàm không tồn tại hoặc chưa được nạp.

Nguyên nhân có thể là:

  • Quên include hoặc require file chứa hàm.
  • Viết sai tên hàm.
  • Extension PHP chưa được bật.

Ví dụ:

<?php
calculateTotal();
?>

Nếu hàm chưa được định nghĩa, chương trình sẽ dừng ngay.

Call to Undefined Method

Lỗi thường gặp khi lập trình hướng đối tượng.

<?php
$user->login();
?>

Nếu đối tượng không có phương thức login(), PHP sẽ báo lỗi.

Hãy kiểm tra:

  • Tên phương thức.
  • Namespace.
  • Autoload.
  • Đúng phiên bản class.

Class Not Found

Đây là lỗi xuất hiện rất nhiều khi sử dụng Composer.

Nguyên nhân:

  • Namespace không đúng.
  • Autoload chưa cập nhật.
  • Quên require autoload.
  • Sai tên file.

Nên chạy lại Composer khi cần cập nhật autoload.

composer dump-autoload

Cannot Modify Header Information

Lỗi này xảy ra khi gửi dữ liệu ra trình duyệt trước khi sử dụng hàm header().

Ví dụ:

<?php
echo "Hello";

header("Location: index.php");
?>

Nguyên nhân có thể là:

  • Đã echo dữ liệu.
  • Có khoảng trắng trước thẻ mở PHP.
  • Có ký tự sau thẻ đóng PHP.

Nên thực hiện chuyển hướng trước khi xuất bất kỳ nội dung nào.

Maximum Execution Time Exceeded

Script chạy quá lâu và vượt thời gian cấu hình của PHP.

Thường gặp khi:

  • Xử lý tập dữ liệu lớn.
  • Đọc nhiều file.
  • Truy vấn SQL chậm.
  • Vòng lặp vô hạn.

Giải pháp:

  • Tối ưu thuật toán.
  • Tối ưu SQL.
  • Chia nhỏ dữ liệu.
  • Tăng thời gian thực thi nếu thực sự cần thiết.

Những lỗi liên quan đến tập tin và thư mục

Failed to Open Stream

Thông báo này xuất hiện khi PHP không thể mở một tập tin hoặc tài nguyên được chỉ định. Đây là lỗi khá phổ biến khi làm việc với include, require, đọc file, ghi file hoặc tải tài nguyên từ máy chủ.

Ví dụ:

<?php
include 'config/database.php';
?>

Nếu tập tin không tồn tại hoặc đường dẫn không chính xác, PHP sẽ sinh lỗi tương tự:

Warning: Failed to open stream: No such file or directory

Nguyên nhân thường gặp:

  • Sai đường dẫn tương đối hoặc đường dẫn tuyệt đối.
  • Tập tin đã bị đổi tên hoặc xóa.
  • Máy chủ không có quyền truy cập.
  • Thư mục làm việc hiện tại khác với dự kiến.

Cách khắc phục:

  • Ưu tiên sử dụng __DIR__ để xây dựng đường dẫn.
  • Kiểm tra sự tồn tại của tập tin trước khi mở.
  • Hạn chế dùng đường dẫn tương đối quá nhiều cấp.

Ví dụ:

<?php
$file = __DIR__ . '/config/database.php';

if (file_exists($file)) {
    include $file;
}
?>

Permission Denied

Lỗi quyền truy cập thường xảy ra trên máy chủ Linux khi PHP không được phép đọc hoặc ghi vào tập tin.

Ví dụ:

<?php
file_put_contents('logs/error.log', 'Test');
?>

Nếu thư mục logs không có quyền ghi, PHP sẽ báo lỗi.

Để xử lý cần kiểm tra:

  • Quyền của tập tin.
  • Quyền của thư mục.
  • User đang chạy PHP-FPM hoặc Apache.
  • SELinux hoặc AppArmor nếu máy chủ đang bật.

Các lỗi thường gặp khi kết nối cơ sở dữ liệu

Access Denied for User

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

Nguyên nhân:

  • Sai tên đăng nhập.
  • Sai mật khẩu.
  • User chưa được cấp quyền.
  • Host kết nối không đúng.

Ví dụ:

<?php
$pdo = new PDO(
    "mysql:host=localhost;dbname=website",
    "root",
    "123456"
);
?>

Nếu thông tin đăng nhập sai, việc kết nối sẽ thất bại.

Nên kiểm tra lại:

  • Thông tin trong file cấu hình.
  • Quyền của tài khoản MySQL.
  • Máy chủ cơ sở dữ liệu đang hoạt động.

Unknown Database

PHP vẫn kết nối được MySQL nhưng cơ sở dữ liệu được chỉ định không tồn tại.

Nguyên nhân có thể là:

  • Đánh sai tên database.
  • Database chưa được tạo.
  • Phân biệt chữ hoa và chữ thường trên Linux.

Hãy kiểm tra chính xác tên database trong hệ quản trị cơ sở dữ liệu trước khi chỉnh sửa mã nguồn.

SQL Syntax Error

Đây là lỗi thuộc về câu lệnh SQL nhưng rất thường được phát hiện trong ứng dụng PHP.

Ví dụ:

<?php
$sql = "SELEC * FROM users";
?>

Chỉ cần viết sai từ khóa SELECT là truy vấn sẽ thất bại.

Ngoài lỗi chính tả, nguyên nhân còn có thể đến từ:

  • Thiếu dấu phẩy.
  • Thiếu dấu nháy.
  • Sai tên bảng.
  • Sai tên cột.

Thói quen tốt là luôn ghi log câu lệnh SQL khi debug để dễ xác định vị trí lỗi.

Các lỗi phát sinh khi làm việc với dữ liệu

Trying to Access Array Offset on Value of Type Null

Lỗi này xuất hiện nhiều từ PHP 7.4 trở lên khi lập trình viên cố truy cập một phần tử của biến đang có giá trị null.

Ví dụ:

<?php
$user = null;

echo $user['name'];
?>

Cách xử lý là kiểm tra dữ liệu trước khi truy cập.

<?php
if (!empty($user)) {
    echo $user['name'];
}
?>

Trying to Get Property of Non-Object

Lỗi xảy ra khi một biến không phải là đối tượng nhưng lại được truy cập như object.

Ví dụ:

<?php
$user = null;

echo $user->name;
?>

Nguyên nhân thường đến từ:

  • Truy vấn cơ sở dữ liệu không có kết quả.
  • API trả về dữ liệu rỗng.
  • Biến chưa được khởi tạo.

Nên kiểm tra giá trị trước khi sử dụng.

Illegal String Offset

Lỗi này xuất hiện khi coi một chuỗi ký tự là mảng.

Ví dụ:

<?php
$data = "Web Moi";

echo $data['name'];
?>

PHP không thể lấy khóa name từ một chuỗi thông thường.

Để tránh lỗi này, hãy xác định kiểu dữ liệu trước khi thao tác bằng các hàm như is_array(), is_string() hoặc is_object().

Lỗi bộ nhớ trong PHP

Allowed Memory Size Exhausted

Thông báo này cho biết script đã sử dụng vượt quá giới hạn bộ nhớ được cấp.

Thường gặp khi:

  • Đọc file rất lớn.
  • Xuất báo cáo hàng trăm nghìn bản ghi.
  • Đệ quy không có điểm dừng.
  • Vòng lặp tạo quá nhiều đối tượng.

Hướng xử lý:

  • Đọc dữ liệu theo từng phần.
  • Giải phóng biến không còn sử dụng.
  • Tối ưu thuật toán.
  • Tăng giới hạn bộ nhớ nếu thật sự cần.

Out of Memory do vòng lặp vô hạn

Không ít trường hợp bộ nhớ bị đầy không phải vì dữ liệu lớn mà vì chương trình không bao giờ kết thúc.

Ví dụ:

<?php
$list = [];

while (true) {
    $list[] = rand();
}
?>

Mỗi vòng lặp đều tạo thêm dữ liệu khiến bộ nhớ tăng liên tục cho đến khi PHP dừng chương trình.

Khi gặp lỗi này, hãy kiểm tra điều kiện dừng của vòng lặp trước khi nghĩ đến việc tăng giới hạn bộ nhớ.

Các lỗi thường gặp khi làm việc với phiên làm việc và Cookie

Session chưa được khởi tạo

Một trong những lỗi phổ biến là sử dụng biến $_SESSION trước khi gọi session_start().

Ví dụ:

<?php
$_SESSION['user'] = 'admin';
?>

Khi đó dữ liệu sẽ không được lưu đúng cách hoặc phát sinh cảnh báo tùy theo cấu hình PHP.

Đúng cách:

<?php
session_start();

$_SESSION['user'] = 'admin';
?>

Ngoài ra, chỉ nên gọi session_start() một lần trong mỗi request để tránh các cảnh báo không cần thiết.

Cookie không được tạo

Cookie cũng giống như hàm header(), phải được gửi trước khi trình duyệt nhận bất kỳ nội dung nào.

Ví dụ sai:

<?php
echo "Xin chào";

setcookie("language", "vi");
?>

Trong trường hợp này cookie sẽ không được gửi đến trình duyệt.

Giải pháp là luôn thiết lập cookie trước khi xuất dữ liệu HTML.

Lỗi khi tải lên tập tin

Không nhận được dữ liệu từ biểu mẫu Upload

Nhiều lập trình viên kiểm tra mã PHP rất lâu nhưng nguyên nhân lại nằm trong thẻ form.

Ví dụ sai:

<form method="post">
<input type="file" name="avatar">
</form>

Biểu mẫu thiếu thuộc tính enctype nên tập tin sẽ không được gửi lên máy chủ.

Đúng cách:

<form method="post" enctype="multipart/form-data">
<input type="file" name="avatar">
</form>

Kích thước tập tin vượt giới hạn

Nếu người dùng tải lên tập tin lớn hơn giới hạn cho phép, PHP sẽ từ chối xử lý.

Nguyên nhân có thể nằm ở:

  • upload_max_filesize.
  • post_max_size.
  • memory_limit.
  • max_execution_time.

Đây đều là các thông số cấu hình trong môi trường PHP và cần được cân nhắc trước khi tăng lên quá cao.

Các lỗi thường gặp khi xử lý chuỗi

Lỗi ký tự tiếng Việt bị lỗi font

Khi làm việc với tiếng Việt, nhiều dự án gặp tình trạng chuỗi bị hiển thị thành các ký tự không đọc được.

Nguyên nhân phổ biến:

  • Tập tin không lưu theo UTF-8.
  • Kết nối MySQL không sử dụng UTF-8.
  • Trang HTML thiếu charset.

Toàn bộ hệ thống nên sử dụng cùng một chuẩn mã hóa để tránh lỗi phát sinh ở nhiều tầng khác nhau.

Đếm sai số lượng ký tự

Hàm strlen() đếm theo byte thay vì ký tự Unicode.

Ví dụ:

<?php
echo strlen("Tiếng Việt");
?>

Kết quả có thể lớn hơn số ký tự thực tế.

Trong trường hợp cần làm việc với Unicode, nên sử dụng các hàm hỗ trợ đa byte tương ứng.

Các lỗi thường gặp khi sử dụng Composer

Vendor không tồn tại

Sau khi tải mã nguồn từ Git hoặc nhận dự án từ người khác, nhiều lập trình viên gặp lỗi vì thư mục vendor chưa được tạo.

Nguyên nhân là các thư viện chưa được cài đặt.

Chỉ cần cài đặt đầy đủ các package theo cấu hình của dự án trước khi chạy ứng dụng.

Package không tương thích phiên bản PHP

Một thư viện có thể yêu cầu PHP 8.2 trong khi máy chủ chỉ đang chạy PHP 8.0.

Dấu hiệu nhận biết là Composer sẽ thông báo không thể cài đặt package do không đáp ứng yêu cầu môi trường.

Trước khi cài đặt bất kỳ thư viện nào, hãy kiểm tra:

  • Phiên bản PHP.
  • Các extension bắt buộc.
  • Phiên bản Composer.

Những sai lầm khiến việc sửa lỗi trở nên khó khăn hơn

Tắt toàn bộ thông báo lỗi trong quá trình phát triển

Một số lập trình viên tắt hoàn toàn hiển thị lỗi để "đỡ rối". Điều này khiến việc tìm nguyên nhân mất nhiều thời gian hơn vì các thông tin quan trọng đã bị ẩn.

Trong môi trường phát triển, nên bật đầy đủ thông báo lỗi để phát hiện sớm các vấn đề tiềm ẩn. Khi triển khai lên môi trường thực tế, mới nên ẩn lỗi khỏi người dùng và ghi chúng vào file log.

Sửa lỗi theo cảm tính

Không ít trường hợp sửa một đoạn mã mà chưa xác định đúng nguyên nhân khiến phát sinh thêm nhiều lỗi khác.

Một quy trình xử lý hiệu quả thường gồm:

  1. Đọc đầy đủ thông báo lỗi.
  2. Xác định chính xác dòng mã liên quan.
  3. Kiểm tra dữ liệu đầu vào.
  4. Đối chiếu với tài liệu hoặc mã nguồn.
  5. Kiểm thử lại sau khi sửa.

Không ghi log khi xảy ra ngoại lệ

Nếu hệ thống chỉ hiển thị thông báo chung như "Có lỗi xảy ra", việc xác định nguyên nhân sẽ rất khó khăn.

Ghi log giúp lưu lại:

  • Thời điểm xảy ra lỗi.
  • Đường dẫn đang được truy cập.
  • Thông tin request.
  • Nội dung ngoại lệ.
  • Stack trace phục vụ việc debug.

Kinh nghiệm hạn chế lỗi PHP ngay từ đầu

Thay vì chỉ tập trung sửa lỗi khi phát sinh, việc xây dựng thói quen lập trình tốt sẽ giúp giảm đáng kể số lượng lỗi trong toàn bộ vòng đời của dự án.

  • Đặt tên biến và hàm rõ ràng, nhất quán.
  • Luôn kiểm tra dữ liệu đầu vào trước khi xử lý.
  • Sử dụng IDE có tính năng phân tích mã nguồn.
  • Viết mã theo chuẩn coding convention thống nhất.
  • Tách các chức năng thành những module nhỏ để dễ kiểm thử.
  • Thường xuyên cập nhật phiên bản PHP và thư viện khi phù hợp.
  • Thực hiện kiểm thử trước khi triển khai lên môi trường thực tế.
  • Đọc kỹ thông báo lỗi thay vì chỉ nhìn vào dòng mã bị báo lỗi.

Kết luận

PHP là một ngôn ngữ linh hoạt và dễ tiếp cận, nhưng cũng đi kèm nhiều dạng lỗi mà lập trình viên có thể gặp trong quá trình phát triển ứng dụng. Việc hiểu rõ từng loại lỗi, nắm được nguyên nhân cốt lõi và áp dụng phương pháp xử lý phù hợp sẽ giúp rút ngắn thời gian debug, nâng cao chất lượng mã nguồn và hạn chế sự cố khi vận hành website.

Thay vì ghi nhớ từng thông báo lỗi một cách máy móc, hãy xây dựng tư duy phân tích vấn đề, kết hợp sử dụng công cụ hỗ trợ, ghi log đầy đủ và tuân thủ các nguyên tắc lập trình tốt. Đây là nền tảng giúp bạn phát triển các dự án PHP ổn định, dễ bảo trì và có khả năng mở rộng trong tương lai.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Chia sẻ nội dung đánh giá của bạn về Tổng hợp các lỗi PHP thường gặp và cách khắc phục
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Đăng ký tư vấn thiết kế website
Tìm hiểu 1 năm không bằng lắng nghe 1 câu tư vấn