Un rapido estratto dalla documentazione di LOAD_FILE()
Funzione MySQL:
Come puoi vedere, ci sono una miriade di ragioni per cui chiami LOAD_FILE()
fallisce:
-
Il file deve essere presente sul computer su cui è in esecuzione il server MySQL. Questo non è sempre lo stesso computer su cui viene eseguito lo script PHP (e questo accade per motivi di sicurezza). Se vengono eseguiti su computer diversi, molto probabilmente non puoi utilizzare
LOAD_FILE()
. Caso chiuso.In teoria potresti usare
FTP
oSFTP
per trasferire il file sul computer su cui è in esecuzione MySQL ma per gli stessi motivi di sicurezza, probabilmente non hai accesso a quel computer. -
Supponendo che nel tuo caso sia PHP che MySQL vengano eseguiti sullo stesso computer,
/images/picture.jpg
è il componente del percorso dell'URL, non un percorso nel file system. Puoi utilizzaredirname()
e__DIR__
per comporre il percorso delleimages
directory a partire dal percorso dello script corrente. -
L'utente che utilizzi per connetterti al server MySQL deve avere il
FILE
privilegio. Il privilegio è concesso all'utente da un DBA. -
Il file deve essere leggibile da tutti. Questa è la parte più semplice. Quando esegui
ls -l
sul file, gli ultimi tre simboli nella colonna dei diritti del file devono essererw-
or--
(non ha senso avere il bit eseguibile impostato). -
Il valore predefinito di
max_allowed_packet
la variabile di sistema è4 MiB
ma un DBA può cambiarlo. Puoi eseguireSELECT @@max_allowed_packet FROM dual
per scoprirne il valore attuale. -
Se
secure_file_priv
la variabile di sistema è impostata, quindi il percorso fornito deve essere relativo a questa directory. Ancora una volta, puoi eseguireSELECT @@secure_file_priv FROM dual
per trovare il suo valore attuale.