Ein kurzer Auszug aus der Dokumentation von LOAD_FILE()
MySQL-Funktion:
Wie Sie sehen können, gibt es unzählige Gründe für Ihren Aufruf von LOAD_FILE()
schlägt fehl:
-
Die Datei muss auf dem Rechner vorhanden sein, auf dem der MySQL-Server läuft. Dies ist nicht immer derselbe Rechner, auf dem das PHP-Skript läuft (und das geschieht aus Sicherheitsgründen). Wenn sie auf verschiedenen Computern laufen, können Sie höchstwahrscheinlich
LOAD_FILE()
nicht verwenden . Fall geschlossen.Theoretisch könnten Sie
FTP
verwenden oderSFTP
um die Datei auf den Computer zu übertragen, auf dem MySQL läuft, aber aus denselben Sicherheitsgründen haben Sie wahrscheinlich keinen Zugriff auf diesen Computer. -
Angenommen, in Ihrem Fall laufen sowohl PHP als auch MySQL auf demselben Computer,
/images/picture.jpg
ist die Pfadkomponente der URL, kein Pfad im Dateisystem. Sie könnendirname()
verwenden und__DIR__
um den Pfad zu denimages
zusammenzustellen Verzeichnis, beginnend mit dem Pfad des aktuellen Skripts. -
Der Benutzer, mit dem Sie sich mit dem MySQL-Server verbinden, muss über die
FILE
Privileg. Das Privileg wird dem Benutzer von einem DBA gewährt. -
Die Datei muss für alle lesbar sein. Dies ist der einfachste Teil. Wenn Sie
ls -l
ausführen auf der Datei müssen die letzten drei Symbole in der Spalte der Dateirechterw-
sein oderr--
(es hat keinen Sinn, das ausführbare Bit gesetzt zu haben). -
Der Standardwert von
max_allowed_packet
Systemvariable ist4 MiB
aber ein DBA kann es ändern. Sie könnenSELECT @@max_allowed_packet FROM dual
ausführen um den aktuellen Wert herauszufinden. -
Wenn der
secure_file_priv
Systemvariable gesetzt ist, muss der angegebene Pfad relativ zu diesem Verzeichnis sein. Auch hier können SieSELECT @@secure_file_priv FROM dual
ausführen um seinen aktuellen Wert zu finden.