Krótki fragment dokumentacji LOAD_FILE()
Funkcja MySQL:
Jak widać, istnieje mnóstwo powodów, dla których wywołujesz LOAD_FILE()
nie powiedzie się:
-
Plik musi znajdować się na komputerze, na którym działa serwer MySQL. Nie zawsze jest to ten sam komputer, na którym działa skrypt PHP (a dzieje się tak ze względów bezpieczeństwa). Jeśli działają na różnych komputerach, najprawdopodobniej nie możesz użyć
LOAD_FILE()
. Sprawa zamknięta.Teoretycznie możesz użyć
FTP
lubSFTP
przenieść plik na komputer, na którym działa MySQL, ale z tych samych względów bezpieczeństwa prawdopodobnie nie masz dostępu do tego komputera. -
Zakładając, że w Twoim przypadku zarówno PHP, jak i MySQL działają na tym samym komputerze,
/images/picture.jpg
jest składnikiem ścieżki adresu URL, a nie ścieżką w systemie plików. Możesz użyćdirname()
i__DIR__
aby skomponować ścieżkę doobrazów
katalog zaczynający się od ścieżki bieżącego skryptu. -
Użytkownik, którego używasz do łączenia się z serwerem MySQL, musi mieć
PLIK
przywilej. Uprawnienie jest przyznawane użytkownikowi przez administratora. -
Plik musi być czytelny dla wszystkich. To najłatwiejsza część. Po uruchomieniu
ls -l
na pliku, ostatnie trzy symbole w kolumnie praw do pliku muszą byćrw-
lubr--
(nie ma sensu ustawiać bitu wykonywalnego). -
Domyślna wartość
max_allowed_packet
zmienna systemowa to4 MiB
ale DBA może to zmienić. Możesz uruchomićSELECT @@max_allowed_packet FROM dual
aby poznać jego aktualną wartość. -
Jeśli
secure_file_priv
zmienna systemowa jest ustawiona, wtedy podana ścieżka musi być względna do tego katalogu. Ponownie możesz uruchomićSELECT @@secure_file_priv FROM dual
aby znaleźć jego aktualną wartość.