Een kort fragment uit de documentatie van LOAD_FILE()
MySQL-functie:
Zoals u kunt zien, zijn er talloze redenen waarom uw oproep naar LOAD_FILE()
mislukt:
-
Het bestand moet aanwezig zijn op de computer waarop de MySQL-server draait. Dit is niet altijd dezelfde computer als die waarop het PHP-script draait (en dit gebeurt om veiligheidsredenen). Als ze op verschillende computers draaien, kunt u hoogstwaarschijnlijk
LOAD_FILE()
niet gebruiken . Zaak gesloten.In theorie zou je
FTP
kunnen gebruiken ofSFTP
om het bestand over te zetten naar de computer waarop MySQL draait, maar om dezelfde veiligheidsredenen heb je waarschijnlijk geen toegang tot die computer. -
Ervan uitgaande dat in jouw geval zowel PHP als MySQL op dezelfde computer draaien,
/images/picture.jpg
is de padcomponent van de URL, niet een pad op het bestandssysteem. U kuntdirname()
gebruiken en__DIR__
om het pad naar deimages
samen te stellen directory beginnend vanaf het pad van het huidige script. -
De gebruiker die u gebruikt om verbinding te maken met de MySQL-server moet de
FILE
voorrecht. Het privilege wordt aan de gebruiker verleend door een DBA. -
Het bestand moet voor iedereen leesbaar zijn. Dit is het gemakkelijkste deel. Wanneer u
ls -l
. uitvoert op het bestand moeten de laatste drie symbolen in de kolom met bestandsrechtenrw-
. zijn ofr--
(het heeft geen zin om het uitvoerbare bit in te stellen). -
De standaardwaarde van
max_allowed_packet
systeemvariabele is4 MiB
maar een DBA kan dit veranderen. U kuntSELECT @@max_allowed_packet FROM dual
. uitvoeren om de huidige waarde te achterhalen. -
Als de
secure_file_priv
systeemvariabele is ingesteld, moet het pad dat u opgeeft relatief zijn aan deze map. Nogmaals, u kuntSELECT @@secure_file_priv FROM dual
. uitvoeren om de huidige waarde te vinden.