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
FTPoSFTPper 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 delleimagesdirectory a partire dal percorso dello script corrente. -
L'utente che utilizzi per connetterti al server MySQL deve avere il
FILEprivilegio. Il privilegio è concesso all'utente da un DBA. -
Il file deve essere leggibile da tutti. Questa è la parte più semplice. Quando esegui
ls -lsul 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_packetla variabile di sistema è4 MiBma un DBA può cambiarlo. Puoi eseguireSELECT @@max_allowed_packet FROM dualper scoprirne il valore attuale. -
Se
secure_file_privla variabile di sistema è impostata, quindi il percorso fornito deve essere relativo a questa directory. Ancora una volta, puoi eseguireSELECT @@secure_file_priv FROM dualper trovare il suo valore attuale.