Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die Funktion load_file funktioniert in mysql nicht

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:

  1. 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 oder SFTP 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.

  2. 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önnen dirname() verwenden und __DIR__ um den Pfad zu den images zusammenzustellen Verzeichnis, beginnend mit dem Pfad des aktuellen Skripts.

  3. 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.

  4. 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 Dateirechte rw- sein oder r-- (es hat keinen Sinn, das ausführbare Bit gesetzt zu haben).

  5. Der Standardwert von max_allowed_packet Systemvariable ist 4 MiB aber ein DBA kann es ändern. Sie können SELECT @@max_allowed_packet FROM dual ausführen um den aktuellen Wert herauszufinden.

  6. Wenn der secure_file_priv Systemvariable gesetzt ist, muss der angegebene Pfad relativ zu diesem Verzeichnis sein. Auch hier können Sie SELECT @@secure_file_priv FROM dual ausführen um seinen aktuellen Wert zu finden.