2011-01-05 38 views
7

Tôi đang làm điều này SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable nhưng nó trả về NULL. Làm thế nào tôi có thể kiểm tra nếu điều này là bởi vì tôi đã không có đặc quyền FILE hoặc nếu nó là cái gì khác? MySQL sẽ không đưa ra lỗi. (Tôi đang sử dụng PHP)MySQL LOAD_FILE trả về NULL

Bất cứ ai cũng có kinh nghiệm với LOAD_FILE, cho tôi biết về chức năng mà :)

<?php 
$result = mysql_query('SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable') or die(mysql_error()); 
while($row = mysql_fetch_assoc($result)) 
{ 
var_dump($row['tmp']); 
} 
+0

Hãy thể hiện mã đầy đủ, bạn đang sử dụng để chạy các truy vấn –

+0

Đây là toàn bộ mã (mã kiểm tra) – Simon

+0

có bạn cấp cho người dùng với các điều khoản? GRANT FILE ON *. * CHO tôi; –

Trả lời

4

Hình như một số phiên bản của MySQL trên bản phân phối Linux có một lỗi với chức năng LOAD_FILE. Đây là the thread. Vào cuối của chủ đề có vẻ như có một cách giải quyết.

CHỈNH SỬA:

Vì bạn đang ở trên máy chủ chia sẻ, hãy xem chức năng bạn muốn, bạn có thể chỉ đọc tệp thay thế? Sử dụng file() nên đọc tệp thành định dạng mảng.

5

Một cách giải quyết thực sự xấu xí có thể được tìm thấy ở đây:

http://angkatbahu.blogspot.com.es/2011/03/mysql-loadfile-function-in-ubuntu-it_12.html

Nếu bạn đặt các tập tin bạn muốn tải trong/var/lib/mysql/all_images thư mục, nó hoạt động!

Tested trong ubuntu 12.10 (và không có, chomd'ing file để sử dụng mysql, không làm việc)

+0

Điều này làm việc cho tôi trên Ubuntu 12.04. Cảm ơn! –

+0

Trong khi giải pháp thay thế xấu, tôi thấy rằng bạn không phải đặt hình ảnh của mình trong/var/lib/mysql/all_images. Tôi đã sử dụng/var/lib/mysql/foo_images và nó hoạt động tốt. Nhờ đó, tôi đã cài đặt lược đồ cơ sở dữ liệu của tôi (gói Debian) tạo/var/lib/mysql/foo_images, điền nó với các tệp hình ảnh, sau đó trong bài đăng của tôi, tôi chạy SQL đầy LOAD_FILE và sau đó xóa/var/lib/mysql/foo_images. Kết quả cuối cùng là hoàn toàn sạch sẽ với cơ hội tối thiểu của rối tung lên cài đặt MySQL, và các giai đoạn trung gian cũng không quá tệ. Tôi hài lòng. –

+1

lý do tại sao các thư mục khác không thành công là khối ứng dụng –

1

để xem những gì đặc quyền mà bạn có, sử dụng show grants.

tôi đã ghi nhận một số lệnh bổ sung mà bạn có thể sử dụng để kiểm tra xem bạn đáp ứng các điều kiện ở đây:

http://pastebin.com/Dvsdxh9Y

Phụ lục I sẽ làm cho tài liệu. Hãy chắc chắn rằng:

  • có quyền thực thi trên thư mục cha
  • Đặc quyền FILE phải được explicily cấp. (. CẤP FILE trên ĐẾN user @ localhost)
  • đặc quyền Bạn đã đỏ ửng
  • Bạn đã đăng xuất và đăng nhập trở lại trong

Ví dụ về phép vào cha mẹ dir:

 

mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` 
drwxrwxr--. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/image 

Test01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 



mysql> \! chmod o+x /home/jlam/code/projectName/doc/filesForTesting/images 
mysql> \! ls -ld `dirname /home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` 
drwxrwxr-x. 2 jlam jlam 4096 May 12 14:22 /home/jlam/code/projectName/doc/filesForTesting/images 
mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Ví dụ về đặc quyền của người dùng:

 

16:38:09 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 
Enter password: 

mysql> show grants; 
+-----------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-----------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'eventCal'@'localhost' IDENTIFIED BY PASSWORD '*xxxxx' | 
| GRANT ALL PRIVILEGES ON `tmp`.* TO 'eventCal'@'localhost'              | 
| GRANT ALL PRIVILEGES ON `eventCalTesting`.* TO 'eventCal'@'localhost'           | 
| GRANT ALL PRIVILEGES ON `eventCal`.* TO 'eventCal'@'localhost'             | 
| GRANT ALL PRIVILEGES ON `eventCal_categoryMigration`.* TO 'eventCal'@'localhost'        | 
+-----------------------------------------------------------------------------------------------------------------+ 
5 rows in set (0.00 sec) 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

In oth er phiên root:

 

mysql> grant file ON *.* to [email protected]; 
Query OK, 0 rows affected (0.00 sec) 

mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

Quay trở lại phiên người dùng, tôi vẫn không thể tải các tập tin

 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------+ 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | 
+-------------------------------------------------------------------------------------------------------------+ 
| NULL                          | 
+-------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

.....Nhưng nếu tôi đăng xuất và trở lại trong:

 

mysql> exit 
Bye 

16:40:14 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 
Enter password: 

mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg'))                                 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

+1

ngoài ra, trên linux ubuntu và những nơi khác, apparmor có thể can thiệp. –