8

私はこれを行ってい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'] );
}
4

3 に答える 3

5

本当に醜い回避策はここで見つけることができます:

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

ロードしたいファイルを/var/ lib / mysql / all_imagesディレクトリに置くと、うまくいきます!

ubuntu 12.10でテストされました(そして、いいえ、mysqlユーザーにファイルをchomdすることは機能しませんでした)

于 2012-12-29T12:20:50.643 に答える
4

Linuxディストリビューション上のMySQLの一部のバージョンには、LOAD_FILE関数にバグがあるようです。これがスレッドです。スレッドの最後に、回避策があるように見えます。

編集:

共有ホストを使用しているので、必要な機能を確認して、代わりにファイルを読み取ることができますか?file()を使用すると、ファイルを配列形式に読み取る必要があります。

于 2011-01-05T18:26:46.187 に答える
1

自分が持っている特権を確認するには、を使用しますshow grants

ここで、条件を満たしているかどうかを確認するために使用できるいくつかの追加コマンドを文書化しました。

http://pastebin.com/Dvsdxh9Y

ドキュメントに作成する補遺。確実に:

  • 親ディレクトリに実行権限があります
  • FILE特権は明示的に付与する必要があります。(.TO user @ localhostのファイルを付与します)
  • 特権をフラッシュしました
  • ログアウトして再度ログインしました

親ディレクトリの権限の例:

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行(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-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'))                                                                                                                                
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F786​​1702F312E302F003C3F787​​061636B657420626567696E3D22EFBBBF222069643D2
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

ユーザー権限の例:

16:38:09(getImages)〜/ code / projectName / doc / filesForTesting / images $ mysql -u eventCal -p eventCal
パスワードを入力する:

mysql> show grants;
+ ------------------------------------------------- -------------------------------------------------- -------------- +
| eventCal@localhostの助成金|
+ ------------------------------------------------- -------------------------------------------------- -------------- +
| パスワードによって識別される'eventCal'@'localhost'への*。*の使用を許可する'*xxxxx' |
| `tmp`。*のすべての特権を'eventCal'@'localhost'に付与する|
| `eventCalTesting`。*のすべての特権を'eventCal'@'localhost'に付与します|
| `eventCal`。*のすべての特権を'eventCal'@'localhost'に付与します|
| `eventCal_categoryMigration`。*のすべての特権を'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*。*をeventCal@localhostに付与します。
クエリOK、影響を受けた0行(0.00秒)

mysql>フラッシュ特権;
クエリOK、影響を受けた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'));
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| hex(LOAD_FILE('/ home / jlam / code / projectName / doc / filesForTesting / images / imageTest01.jpg'))                                                                                                                                
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
| FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F786​​1702F312E302F003C3F787​​061636B657420626567696E3D22EFBBBF222069643D2
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

于 2014-05-12T20:31:00.227 に答える