Et hurtigt uddrag fra dokumentationen af LOAD_FILE() MySQL-funktion:
SOM du kan se, er der utallige grunde til dit opkald til LOAD_FILE()
mislykkes:
-
Filen skal være til stede på den computer, hvor MySQL-serveren kører. Dette er ikke altid den samme computer som den, hvor PHP-scriptet kører (og dette sker af sikkerhedsmæssige årsager). Hvis de kører på forskellige computere, kan du højst sandsynligt ikke bruge
LOAD_FILE()
. Sagen er afsluttet.I teorien kunne du bruge
FTP
ellerSFTP
at overføre filen til den computer, hvor MySQL kører, men af samme sikkerhedsmæssige årsager har du sandsynligvis ikke adgang til den computer. -
Hvis du antager, at både PHP og MySQL kører på den samme computer,
/images/picture.jpg
er URL'ens stikomponent, ikke en sti på filsystemet. Du kan brugedirname()
og__DIR__
for at sammensætte stien tilbillederne
mappe, der starter fra stien til det aktuelle script. -
Den bruger, du bruger til at oprette forbindelse til MySQL-serveren, skal have
FIL
privilegium. Rettigheden er givet til brugeren af en DBA. -
Filen skal kunne læses af alle. Dette er den nemmeste del. Når du kører
ls -l
på filen skal de sidste tre symboler i kolonnen med filrettigheder værerw-
ellerr--
(det nytter ikke at have den eksekverbare bit indstillet). -
Standardværdien for
max_allowed_packet
systemvariablen er4 MiB
men en DBA kan ændre det. Du kan køreSELECT @@max_allowed_packet FROM dual
for at finde ud af dens aktuelle værdi. -
Hvis
secure_file_priv
systemvariablen er indstillet, så skal stien du angiver være i forhold til denne mappe. Igen kan du køreSELECT @@secure_file_priv FROM dual
for at finde dens aktuelle værdi.