Я делаю это 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 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------