Zmiana image w bazie za pomocą PHP

0

Witam

Chciałem dodać funkcję aktualizacji zdjęcia, które już znajduje się w bazie.
HTML
formularz

<form action="scripts/setImage.php" method="post"> 
                        <h3>Ustaw moje zdjęcie:</h3>
                        Wybierz zdjęcie:<br><br>
                        <input type="file" name="file"><br>
                        <input type="submit" value="Zatwierdź">      
                    </form>

PHP

$file = $_POST['file'];
$path = file_get_contents($file);
if (isset($_POST['file'])) {
    $db->UPDATE("UPDATE users SET image = LOAD_FILE('$path') WHERE id = $idLogged");
}

Tylko muszę zdobyć ścieżkę pliku pobieranego za pomocą formularza input type='file', ale nie wiem jak. File_get_contents myślałem że pobiera ścieżke, ale nie działa.

0

Jak sama nazwa wskazuje, file_get_content pobiera zawartość, a nie ścieżkę...

Nie zapisuj obrazka bezpośrednio do bazy, to bez sensu. Zapisz samą ścieżkę, a sam obrazek załaduj na serwer. Ba, nawet nie musisz ścieżki, może wystarczy sama nazwa pliku - zakładając, że ścieżka do wszystkich plików jest taka sama, to można ją przechowywać jako stałą, a nazwą pliku będzie jakiś unikalny identyfikator, by nie było powtórzeń.

0

Poczytaj sobie o $_FILES.

1
serek napisał(a):

Jak sama nazwa wskazuje, file_get_content pobiera zawartość, a nie ścieżkę...

Ba, nawet nie musisz ścieżki, może wystarczy sama nazwa pliku - zakładając, że ścieżka do wszystkich plików jest taka sama, to można ją przechowywać jako stałą

Tyko wiesz, że jeżeli w jednym katalogu masz bardzo dużo plików, to spada (edit: a raczej wzrasta :) ) czas dostepu do pliku? Kilkaset tysięcy plików w jednym katalogu i zaczyna to być poważny problem. Nawet przy kilku tysiącach jest to odczuwalne.

0

Wpisz w g: image update php i masz wyniki, tutki na youtube:

0
TomRZ napisał(a):

Tyko wiesz, że jeżeli w jednym katalogu masz bardzo dużo plików, to spada (edit: a raczej wzrasta :) ) czas dostepu do pliku? Kilkaset tysięcy plików w jednym katalogu i zaczyna to być poważny problem. Nawet przy kilku tysiącach jest to odczuwalne.

No tak, to podział na katalogi wtedy. Ale wątpię, że OP by taki problem miał, raczej potrzebuje podstaw^^ A nawet jeśli katalogi, to nadal można ich nazw nie trzymać w bazie, jeśli np. może ich nazwy wygenerować z innych danych (np. katalog jako ID usera). Zależy co chce. Dla 2 plików na krzyż nie ma sensu bawić się w katalogi^^

1

Dla 2 plików na krzyż na pewno, ale nie wiemy ile tego trzeba.

Ja swego czasu napisałem metodę które dla danej liczby określa katalog, trzymając się zasady że w danym katalogu nie może być więcej niż X plików i Y podkatalogów (domyślnie 100 plików i 10 podkatalogów), przydaje się dla dużej ilości plików.

Np. jeżeli katalog docelowy to "photos", to dla liczby 15 katalogiem dla pliku będzie po prostu katalog docelowy "photos/", a dla liczby rzędu kilkadziesiąt tysięcy może to być coś w stylu "photos/10/34/12/". Mi się bardzo przydaje bo operuje na dużej liczbie plików, gdzie liczba wg. której określa się katalog podstawowy to PK numeryczny danego wiersza który przechowuje w bazie nazwę pliku.

Jeżeli ktoś zainteresowany to chodzi o metodę "getClusteredDir" w tej klasie: https://github.com/tztztztz/php-no-slam-cache/blob/master/vendor/inopx/io/IOTool.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1