MySQL LOAD_FILE возвращает NULL

Я делаю это SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable но возвращает NULL. Как я могу проверить это, потому что у меня нет привилегии FILE, или если это что-то еще? MySQL не даст ошибку. (Я использую PHP)

Любой, у кого есть опыт работы с LOAD_FILE, расскажите мне об этой функции 🙂

 <?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'] ); } 

Похоже, что некоторые версии MySQL в дистрибутивах Linux имеют ошибку с функцией LOAD_FILE. Вот нить . В самом конце потока, похоже, может быть обходной путь.

РЕДАКТИРОВАТЬ:

Поскольку вы находитесь на общем хосте, глядя на функциональность, которую вы хотите, вы могли бы просто прочитать файл? Использование файла () должно читать файл в формате массива.

Очень уродливое обходное решение можно найти здесь:

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

Если вы поместите файлы, которые хотите загрузить в каталоге / var / lib / mysql / all_images, он работает!

Протестировано в ubuntu 12.10 (и нет, chomd'ing файлы для пользователя mysql, не работает)

Чтобы узнать, какие у вас есть привилегии, используйте show grants .

Я документировал некоторые дополнительные команды, которые вы можете использовать, чтобы проверить, соответствуют ли вам условия:

http://pastebin.com/Dvsdxh9Y

Добавление, которое я сделал бы в документации. Убедиться:

  • есть разрешение на выполнение в родительском каталоге
  • Обязательно должна быть предоставлена ​​привилегия FILE. (ГРАНТ ФАЙЛ на . К пользователю @ localhost)
  • У вас есть сброшенные привилегии
  • Вы вышли из системы и вошли в систему

Пример разрешения на родительский каталог:


 mysql> \!  ls -ld `dirname / home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg`
 drwxrwxr--.  2 jlam jlam 4096 12 мая 14:22 / главная / 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 строка в наборе (0,00 сек)



 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-х.  2 jlam jlam 4096 12 мая 14:22 / главная / jlam / code / projectName / doc / filesForTesting / images
 mysql> select hex (LOAD_FILE ('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
 |  шестигранный (LOAD_FILE ( '/ дом / jlam / код / ​​Projectname / DOC / filesForTesting / изображения / imageTest01.jpg'))                                                                                                                                
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
 |  FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

Пример пользовательских привилегий:


 16:38:09 (getImages) ~ / code / projectName / doc / filesForTesting / images $ mysql -u eventCal -p eventCal
 Введите пароль: 

 mysql> показать гранты;
 + ------------------------------------------------- -------------------------------------------------- -------------- +
 |  Гранты для eventCal @ localhost |
 + ------------------------------------------------- -------------------------------------------------- -------------- +
 |  GRANT USAGE ON *. * TO 'eventCal' @ 'localhost' IDENTIFIED BY PASSWORD '* xxxxx' |
 |  ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА `tmp`. * TO 'eventCal' @ 'localhost' |
 |  ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ на `eventCalTesting`. * TO 'eventCal' @ 'localhost' |
 |  ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ на `eventCal`. * TO 'eventCal' @ 'localhost' |
 |  ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ на `eventCal_categoryMigration`. * TO 'eventCal' @ 'localhost' |
 + ------------------------------------------------- -------------------------------------------------- -------------- +
 5 строк в наборе (0,00 сек)

 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 строка в наборе (0,00 сек)

В другой корневой сессии:


 mysql> предоставить файл ON *. * to eventCal @ localhost;
 Запрос ОК, 0 строк, затронутых (0.00 сек)

 mysql> привилегии flush;
 Запрос ОК, 0 строк, затронутых (0.00 сек)

В сеансе пользователя я все еще не могу загрузить файл


 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 строка в наборе (0,00 сек)

….. Но если я выйду и вернусь в:


 mysql> exit
 до свидания

 16:40:14 (getImages) ~ / code / projectName / doc / filesForTesting / images $ mysql -u eventCal -p eventCal
 Введите пароль: 

 mysql> select hex (LOAD_FILE ('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'));
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
 |  шестигранный (LOAD_FILE ( '/ дом / jlam / код / ​​Projectname / DOC / filesForTesting / изображения / imageTest01.jpg'))                                                                                                                                
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
 |  FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487
 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------