Un extracto rápido de la documentación de LOAD_FILE()
Función MySQL:
COMO puede ver, hay innumerables razones para llamar a LOAD_FILE()
falla:
-
El archivo debe estar presente en la computadora donde se ejecuta el servidor MySQL. Esta no siempre es la misma computadora en la que se ejecuta el script PHP (y esto sucede por razones de seguridad). Si se ejecutan en diferentes computadoras, lo más probable es que no puedas usar
LOAD_FILE()
. Caso cerrado.En teoría podrías usar
FTP
oSFTP
para transferir el archivo a la computadora donde se ejecuta MySQL, pero por las mismas razones de seguridad, probablemente no tenga acceso a esa computadora. -
Suponiendo que en su caso PHP y MySQL se ejecutan en la misma computadora,
/images/picture.jpg
es el componente de ruta de la URL, no una ruta en el sistema de archivos. Puede usardirname()
y__DIR__
para componer la ruta a lasimages
directorio a partir de la ruta del script actual. -
El usuario que utilice para conectarse al servidor MySQL debe tener el
FILE
privilegio. El privilegio se otorga al usuario por un DBA. -
El archivo debe ser legible por todos. Esta es la parte más fácil. Cuando ejecutas
ls -l
en el archivo, los últimos tres símbolos en la columna de derechos de archivo deben serrw-
or--
(no tiene sentido tener el bit ejecutable establecido). -
El valor predeterminado de
max_allowed_packet
la variable del sistema es4 MiB
pero un DBA puede cambiarlo. Puede ejecutarSELECT @@max_allowed_packet FROM dual
para averiguar su valor actual. -
Si el
secure_file_priv
la variable del sistema está configurada, entonces la ruta que proporcione debe ser relativa a este directorio. Nuevamente, puede ejecutarSELECT @@secure_file_priv FROM dual
para encontrar su valor actual.