Ett snabbt utdrag ur dokumentationen för LOAD_FILE() MySQL-funktion:
SOM du kan se finns det många anledningar till att du ringer till LOAD_FILE()
misslyckas:
-
Filen måste finnas på datorn där MySQL-servern körs. Det här är inte alltid samma dator som den där PHP-skriptet körs (och detta sker av säkerhetsskäl). Om de körs på olika datorer kan du antagligen inte använda
LOAD_FILE()
. Ärendet avslutat.I teorin kan du använda
FTP
ellerSFTP
för att överföra filen till datorn där MySQL körs men av samma säkerhetsskäl har du förmodligen inte tillgång till den datorn. -
Förutsatt att i ditt fall både PHP och MySQL körs på samma dator,
/images/picture.jpg
är sökvägskomponenten i URL:en, inte en sökväg i filsystemet. Du kan användadirname()
och__DIR__
för att skapa sökvägen tillbilderna
katalog som börjar från sökvägen till det aktuella skriptet. -
Användaren du använder för att ansluta till MySQL-servern måste ha
FIL
privilegium. Behörigheten ges till användaren av en DBA. -
Filen måste vara läsbar för alla. Detta är den enklaste delen. När du kör
ls -l
på filen måste de tre sista symbolerna i kolumnen med filrättigheter vararw-
ellerr--
(det är ingen idé att ha den körbara biten inställd). -
Standardvärdet för
max_allowed_packet
systemvariabeln är4 MiB
men en DBA kan ändra det. Du kan köraSELECT @@max_allowed_packet FROM dual
för att ta reda på dess nuvarande värde. -
Om
secure_file_priv
systemvariabeln är inställd så måste sökvägen du anger vara relativ till denna katalog. Återigen kan du köraSELECT @@secure_file_priv FROM dual
för att hitta dess nuvarande värde.