Un extrait rapide de la documentation de LOAD_FILE()
Fonction MySQL :
Comme vous pouvez le voir, il y a des myriades de raisons pour lesquelles votre appel à LOAD_FILE()
échoue :
-
Le fichier doit être présent sur l'ordinateur sur lequel le serveur MySQL s'exécute. Ce n'est pas toujours le même ordinateur que celui sur lequel le script PHP s'exécute (et cela se produit pour des raisons de sécurité). S'ils s'exécutent sur des ordinateurs différents, vous ne pouvez probablement pas utiliser
LOAD_FILE()
. Affaire close.En théorie, vous pourriez utiliser
FTP
ouSFTP
pour transférer le fichier sur l'ordinateur sur lequel MySQL s'exécute, mais pour les mêmes raisons de sécurité, vous n'avez probablement pas accès à cet ordinateur. -
En supposant dans votre cas que PHP et MySQL s'exécutent sur le même ordinateur,
/images/picture.jpg
est le composant de chemin de l'URL, pas un chemin sur le système de fichiers. Vous pouvez utiliserdirname()
et__DIR__
pour composer le chemin vers lesimages
répertoire à partir du chemin du script en cours. -
L'utilisateur que vous utilisez pour vous connecter au serveur MySQL doit avoir le
FILE
privilège. Le privilège est accordé à l'utilisateur par un DBA. -
Le fichier doit être lisible par tous. C'est la partie la plus facile. Lorsque vous exécutez
ls -l
sur le fichier, les trois derniers symboles de la colonne des droits du fichier doivent êtrerw-
our--
(il est inutile d'avoir le bit exécutable défini). -
La valeur par défaut de
max_allowed_packet
la variable système est4 MiB
mais un DBA peut le changer. Vous pouvez exécuterSELECT @@max_allowed_packet FROM dual
pour connaître sa valeur actuelle. -
Si le
secure_file_priv
variable système est définie, le chemin que vous fournissez doit être relatif à ce répertoire. Encore une fois, vous pouvez exécuterSELECT @@secure_file_priv FROM dual
pour trouver sa valeur actuelle.