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
FTPverwenden oderSFTPum 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.jpgist die Pfadkomponente der URL, kein Pfad im Dateisystem. Sie könnendirname()verwenden und__DIR__um den Pfad zu denimageszusammenzustellen Verzeichnis, beginnend mit dem Pfad des aktuellen Skripts. -
Der Benutzer, mit dem Sie sich mit dem MySQL-Server verbinden, muss über die
FILEPrivileg. 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 -lausfü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_packetSystemvariable ist4 MiBaber ein DBA kann es ändern. Sie könnenSELECT @@max_allowed_packet FROM dualausführen um den aktuellen Wert herauszufinden. -
Wenn der
secure_file_privSystemvariable gesetzt ist, muss der angegebene Pfad relativ zu diesem Verzeichnis sein. Auch hier können SieSELECT @@secure_file_priv FROM dualausführen um seinen aktuellen Wert zu finden.