Một đoạn trích ngắn từ tài liệu của LOAD_FILE()
Hàm MySQL:
Như bạn có thể thấy, có vô số lý do khiến bạn gọi đến LOAD_FILE()
không thành công:
-
Tệp phải có trên máy tính có máy chủ MySQL chạy. Đây không phải lúc nào cũng giống máy tính chạy tập lệnh PHP (và điều này xảy ra vì lý do bảo mật). Nếu chúng chạy trên các máy tính khác nhau thì có lẽ bạn không thể sử dụng
LOAD_FILE()
. Trường hợp đã đóng.Về lý thuyết, bạn có thể sử dụng
FTP
hoặcSFTP
để chuyển tệp trên máy tính có MySQL chạy nhưng vì lý do bảo mật tương tự, bạn có thể không có quyền truy cập vào máy tính đó. -
Giả sử trong trường hợp của bạn, cả PHP và MySQL đều chạy trên cùng một máy tính,
/images/picture.jpg
là thành phần đường dẫn của URL, không phải là đường dẫn trên hệ thống tệp. Bạn có thể sử dụngdirname()
và__DIR__
để soạn đường dẫn đếnimages
thư mục bắt đầu từ đường dẫn của tập lệnh hiện tại. -
Người dùng bạn sử dụng để kết nối với máy chủ MySQL phải có
FILE
đặc ân. Đặc quyền được cấp cho người dùng bởi DBA. -
Tất cả đều phải đọc được tệp. Đây là phần dễ nhất. Khi bạn chạy
ls -l
trên tệp, ba ký hiệu cuối cùng trong cột quyền tệp phải làrw-
hoặcr--
(không có điểm nào có bộ bit thực thi). -
Giá trị mặc định của
max_allowed_packet
biến hệ thống là4 MiB
nhưng một DBA có thể thay đổi nó. Bạn có thể chạySELECT @@max_allowed_packet FROM dual
để tìm ra giá trị hiện tại của nó. -
Nếu
secure_file_priv
biến hệ thống được đặt thì đường dẫn bạn cung cấp phải liên quan đến thư mục này. Một lần nữa, bạn có thể chạySELECT @@secure_file_priv FROM dual
để tìm giá trị hiện tại của nó.