Krátký výňatek z dokumentace LOAD_FILE()
Funkce MySQL:
Jak vidíte, existuje nespočet důvodů, proč voláte LOAD_FILE() selže:
-
Soubor musí být přítomen na počítači, kde běží MySQL server. Ne vždy se jedná o stejný počítač jako ten, na kterém běží PHP skript (a to se děje z bezpečnostních důvodů). Pokud běží na různých počítačích, pak s největší pravděpodobností nemůžete použít
LOAD_FILE(). Případ uzavřen.Teoreticky můžete použít
FTPneboSFTPpřenést soubor do počítače, kde běží MySQL, ale ze stejných bezpečnostních důvodů k tomuto počítači pravděpodobně nemáte přístup. -
Za předpokladu, že ve vašem případě běží PHP i MySQL na stejném počítači,
/images/picture.jpgje komponenta cesty adresy URL, nikoli cesta v systému souborů. Můžete použítdirname()a__DIR__vytvořte cestu kimagesadresář začínající od cesty aktuálního skriptu. -
Uživatel, kterého používáte k připojení k serveru MySQL, musí mít
FILEprivilegium. Toto oprávnění uživateli uděluje správce databází. -
Soubor musí být čitelný pro všechny. Toto je ta nejjednodušší část. Když spustíte
ls -lna souboru musí být poslední tři symboly ve sloupci práv souborurw-nebor--(nemá smysl mít nastavený spustitelný bit). -
Výchozí hodnota
max_allowed_packetsystémová proměnná je4 MiBale DBA to může změnit. Můžete spustitSELECT @@max_allowed_packet FROM dualzjistit jeho aktuální hodnotu. -
Pokud
secure_file_privje nastavena systémová proměnná, pak cesta, kterou zadáte, musí být relativní k tomuto adresáři. Opět můžete spustitSELECT @@secure_file_priv FROM dualzjistit jeho aktuální hodnotu.