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ć
FTPlubSFTPprzenieść 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.jpgjest 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ówkatalog zaczynający się od ścieżki bieżącego skryptu. -
Użytkownik, którego używasz do łączenia się z serwerem MySQL, musi mieć
PLIKprzywilej. Uprawnienie jest przyznawane użytkownikowi przez administratora. -
Plik musi być czytelny dla wszystkich. To najłatwiejsza część. Po uruchomieniu
ls -lna pliku, ostatnie trzy symbole w kolumnie praw do pliku muszą byćrw-lubr--(nie ma sensu ustawiać bitu wykonywalnego). -
Domyślna wartość
max_allowed_packetzmienna systemowa to4 MiBale DBA może to zmienić. Możesz uruchomićSELECT @@max_allowed_packet FROM dualaby poznać jego aktualną wartość. -
Jeśli
secure_file_privzmienna systemowa jest ustawiona, wtedy podana ścieżka musi być względna do tego katalogu. Ponownie możesz uruchomićSELECT @@secure_file_priv FROM dualaby znaleźć jego aktualną wartość.