2011-01-05 15 views
7

que estoy haciendo esto SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable pero devuelve NULL. ¿Cómo puedo verificar si esto es porque no tengo el privilegio FILE o si es algo más? MySQL no dará un error. (Estoy usando PHP)MySQL LOAD_FILE devuelva NULL

Cualquier persona que tenga experiencia con LOAD_FILE, háblame de esa función :)

<?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

favor muestro el código completo que se utiliza para ejecutar la consulta –

+0

Este es el código completo (código de prueba) – Simon

+0

le haya garantizado al usuario con los permisos? OTORGAR ARCHIVO EN *. * PARA MI; –

Respuesta

4

Parece que algunas versiones de MySQL en las distribuciones de Linux tienen un error con la función LOAD_FILE. Aquí está the thread. Al final del hilo parece que podría haber una solución alternativa.

EDIT:

Ya que estás en un servidor compartido, mirando a la funcionalidad que desea pudiste leer el archivo en su lugar? Usando el file() debe leer el archivo en un formato de matriz.

5

Una muy fea solución se puede encontrar aquí:

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

Si coloca los archivos que desea cargar en/var/lib/mysql/all_images directorio, funciona!

Probado en Ubuntu 12.10 (y no, chomd'ing archivos de usuario de MySQL, no funcionó)

+0

Esto funcionó para mí en Ubuntu 12.04. ¡Gracias! –

+0

Aunque la solución es fea, descubrí que no tiene que colocar sus imágenes en/var/lib/mysql/all_images. Usé/var/lib/mysql/foo_images y funcionó bien. Gracias a esto, tuve mi instalador de esquema de base de datos (un paquete de Debian), creé/var/lib/mysql/foo_images, lo llené con archivos de imagen, luego en mi postinst corrí mi SQL lleno de LOAD_FILEs y luego eliminé/var/lib/mysql/foo_images. El resultado final es perfectamente limpio con la mínima posibilidad de estropear la instalación de MySQL, y las etapas intermedias tampoco fueron tan malas. Estoy satisfecho. –

+1

la razón por la cual los otros directorios fallaron fue el bloque apparmor –

1

para ver lo que tienen privilegios, utilice show grants.

he documentado algunos comandos adicionales que puede utilizar para comprobar si cumple con las condiciones aquí:

http://pastebin.com/Dvsdxh9Y

Addendum I haría a la documentación. Asegúrese de que:

  • hay permiso de ejecución en el directorio padre
  • El privilegio FILE debe se concede explicily. (. ARCHIVO GRANT sobre PARA usuario @ localhost)
  • privilegios Has enrojecidas
  • Ha cerrado sesión y vuelto a conectar

Ejemplo de permiso de directorio padre:

 

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 
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Ejemplo de privilegios de usuario:

 

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 sesión de 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) 

vuelta en la sesión de usuario, todavía no puede cargar el archivo

 

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) 

.....Pero si salir y volver en:

 

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

Además, en Ubuntu Linux y otros lugares, la aparición puede interferir. –