TÓM TẮT NỘI DUNG
Hướng dẫn fix lỗi “Invalid numeric literal” trong PHP
Hiện tượng lỗi
- Code (file) PHP không chạy
- Request trả về Response 500 (Server Error) (Trong API)
- PHP Parser hiển thị error log: Invalid numeric literal in ….php on line …
Nguyên nhân
Nguyên nhân cốt lõi
PHP Parser không thể phân biệt dữ liệu thuộc kiểu số (number) hay chữ (string), xuất phát từ cách viết dữ liệu của coder.
Nguyên nhân cụ thể
- Coder dùng các ký tự số liên tiếp không được đặt trong cặp dấu nháy, bắt đầu bằng 0 trong một biểu thức so sánh. Ví dụ:
$check = $input == 012345; // Invalid numeric literal
$check = $input == "012345"; // Như vầy mới đúng - Coder dùng các ký tự số liên tiếp không được đặt trong cặp dấu nháy, bắt đầu bằng 0 trong một mảng (array). Ví dụ:
$array = [12, 34, 01, 0898244]; // Invalid numeric literal
$array = [12, 34, "01", "0898244"]; // Như vầy mới đúng
Hãy luôn nhớ rằng, bản thân một chuỗi các ký tự số liên tiếp bắt đầu bằng 0 không thể xếp vào kiểu dữ liệu number, thay vào đó, nó được xếp vào kiểu dữ liệu string. Do đó, chuỗi ký tự này phải luôn được đặt trong cặp dấu nháy thì mới đúng cú pháp.
Ví dụ:
$a = "02";
$phone_number = "0908723123";
$key = "02345678";
Cách khắc phục (fix)
Bước 1. Xác định vị trí câu lệnh chứa lỗi
Bạn có thể xác định vị trí câu lệnh PHP chứa lỗi thông qua dòng Error log mà bạn nhận được khi chạy code. Ví dụ:
Parse error: Invalid numeric literal in /opt/lampp/htdocs/php-can-ban/test-php-env.php on line 5
→ Câu lệnh chứa lỗi nằm ở dòng số 5 của file test-php-env.php
Note: Trong trường hợp trình duyệt web không hiển thị lỗi, bạn cấu hình lại file php.ini, thay giá trị display_errors = Off → display_errors = On. Sau khi fix lỗi xong, bạn trả lại giá trị Off ban đầu để đảm bảo an toàn về bảo mật.
Bước 2. Bổ sung cặp dấu nháy
Sau khi xác định vị trí câu lệnh chứa lỗi, bạn chỉ cần bổ sung cặp dấu nháy (nháy đơn hoặc nháy đôi) cho các chuỗi ký tự số bắt đầu bằng 0 (như đã phân tích ở phần nguyên nhân).