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
FTPouSFTPpour 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.jpgest 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 lesimagesrépertoire à partir du chemin du script en cours. -
L'utilisateur que vous utilisez pour vous connecter au serveur MySQL doit avoir le
FILEprivilè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 -lsur 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_packetla variable système est4 MiBmais un DBA peut le changer. Vous pouvez exécuterSELECT @@max_allowed_packet FROM dualpour connaître sa valeur actuelle. -
Si le
secure_file_privvariable 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 dualpour trouver sa valeur actuelle.