Я делаю это 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 .
Я документировал некоторые дополнительные команды, которые вы можете использовать, чтобы проверить, соответствуют ли вам условия:
Добавление, которое я сделал бы в документации. Убедиться:
Пример разрешения на родительский каталог:
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
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------