Về danh sách

Cách sửa lỗi upload file có khoảng trắng (space) trên Moodle khi dùng aaPanel

Cover

Khi chạy Moodle trên server quản lý bằng aaPanel, đôi khi upload file có khoảng trắng trong tên bị lỗi hoặc không tải được. Nguyên nhân thường do Apache/Nginx không giải mã URL đúng khi Moodle xử lý PATH_INFO. Bài viết hướng dẫn sửa nhanh trong file core Moodle.

Moodle admin — logo/ảnh bị lỗi không tải (broken image) do cấu hình server/URL encoding
Triệu chứng liên quan: logo hoặc tài nguyên tĩnh không tải (broken image) trên trang quản trị Moodle — có thể do PATH_INFO/URL chưa được decode đúng.

1. Mô tả lỗi

  • Upload file không có khoảng trắng trong tên → hoạt động bình thường
  • Upload file có khoảng trắng trong tên → báo lỗi hoặc không tải được
Tên fileKết quả
file1.pdf✅ tải lên bình thường
lesson1.docx✅ tải lên bình thường
bai tap.pdf❌ lỗi
lecture slide.pdf❌ lỗi

Nguyên nhân thường do Apache / Nginx không giải mã URL đúng khi Moodle xử lý PATH_INFO.

2. Nguyên nhân

Trong Moodle, khi xử lý file download/upload, hệ thống dùng biến:

$_SERVER['PATH_INFO']

Với một số cấu hình server (đặc biệt aaPanel + Nginx / Apache), biến này có thể chứa URL encoded string.

Ví dụ: /pluginfile.php/.../bai%20tap.pdf thay vì /pluginfile.php/.../bai tap.pdf. Nếu Moodle không giải mã URL, nó sẽ không tìm thấy file thực tế.

3. Cách sửa lỗi

Chúng ta cần sửa core Moodle để decode URL. ⚠️ Chỉ nên sửa khi server gặp lỗi này.

4. Mở file cần chỉnh

Trên server aaPanel, mở file:

/path/to/moodle/lib/weblib.php

Ví dụ: /www/wwwroot/moodle/lib/weblib.php

5. Tìm đoạn code

Tìm dòng:

$relativepath = $_SERVER['PATH_INFO'];

6. Sửa thành

$relativepath = urldecode($_SERVER['PATH_INFO']);

7. Ví dụ trước và sau khi sửa

Trước khi sửa

$relativepath = $_SERVER['PATH_INFO'];

Sau khi sửa

$relativepath = urldecode($_SERVER['PATH_INFO']);

8. Vì sao cách này hoạt động

Hàm PHP urldecode() sẽ chuyển bai%20tap.pdf thành bai tap.pdf. Nhờ vậy Moodle có thể xác định đúng đường dẫn file trên hệ thống.

9. Áp dụng cho Apache giống IIS

Moodle đã hỗ trợ decode URL cho IIS, nhưng một số cấu hình Apache/Nginx không tự decode. Việc thêm urldecode() giúp Apache xử lý giống IIS.

10. Khởi động lại web server

Sau khi chỉnh sửa, restart web server trong aaPanel: Apache Restart hoặc Nginx Restart.

11. Kiểm tra lại

Upload thử các file: bai tap.pdf, lecture slide.pptx, video lesson 1.mp4. Nếu tải lên bình thường → lỗi đã được khắc phục.

12. Lưu ý quan trọng

Vì sửa core Moodle, khi update Moodle có thể bị ghi đè. Sau khi update cần kiểm tra lại file lib/weblib.php.

13. Giải pháp lâu dài (khuyến nghị)

Ngoài sửa core, có thể cấu hình lại Nginx/Apache rewrite rules hoặc đảm bảo server decode URL đúng chuẩn. Tuy nhiên cách sửa trong weblib.phpnhanh và hiệu quả nhất.

Kết luận

Lỗi upload file có khoảng trắng khi dùng Moodle trên aaPanel xảy ra do PATH_INFO chưa được urldecode. Chỉ cần sửa:

$relativepath = urldecode($_SERVER['PATH_INFO']);

là có thể khắc phục hoàn toàn.