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
FTPoSFTPpara 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.jpges el componente de ruta de la URL, no una ruta en el sistema de archivos. Puede usardirname()y__DIR__para componer la ruta a lasimagesdirectorio a partir de la ruta del script actual. -
El usuario que utilice para conectarse al servidor MySQL debe tener el
FILEprivilegio. 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 -len 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_packetla variable del sistema es4 MiBpero un DBA puede cambiarlo. Puede ejecutarSELECT @@max_allowed_packet FROM dualpara averiguar su valor actual. -
Si el
secure_file_privla variable del sistema está configurada, entonces la ruta que proporcione debe ser relativa a este directorio. Nuevamente, puede ejecutarSELECT @@secure_file_priv FROM dualpara encontrar su valor actual.