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
FTP
neboSFTP
př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.jpg
je komponenta cesty adresy URL, nikoli cesta v systému souborů. Můžete použítdirname()
a__DIR__
vytvořte cestu kimages
adresář 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
FILE
privilegium. 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 -l
na 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_packet
systémová proměnná je4 MiB
ale DBA to může změnit. Můžete spustitSELECT @@max_allowed_packet FROM dual
zjistit jeho aktuální hodnotu. -
Pokud
secure_file_priv
je 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 dual
zjistit jeho aktuální hodnotu.