2012-05-08 15 views
7

Zastanawiam się, czy ktoś może mi pomóc.Usuń pliki obrazów z serwera

Połączyłem stronę this, która umożliwia użytkownikom przeglądanie przesłanych zdjęć w formacie galerii.

Chcę teraz dodać funkcję usuwania do każdego obrazu. Stworzyłem przycisk i skrypt Javascript, ale nie jestem pewien, jak połączyć "kliknięcie przycisku" z faktycznym fizycznym usunięciem pliku.

ilustracje nie są przechowywane w bazie danych, ale są w dwóch lokalizacjach folderu na serwerze, w następującej strukturze:

UploadedFiles/username/locationid/imagename i

UploadedFiles/username/locationid/Thumbnails/imagename

Jestem stosunkowo nowy w PHP a teraz docieram do granic mojej wiedzy, ale na pewno chcę się uczyć. Z dokumentacji, którą przeczytałem, myślę, że mam rację mówiąc, że metoda unlink jest poprawną komendą do użycia?

Ale co mam na znalezienie naprawdę trudno jest mówić kod znaleźć foldery o username i locationid foldery, które odpowiadają aktualnej username i locationid a następnie usunąć pliki, które pasują do zmiennej $source nazwy.

Po prostu zastanawiałem się, czy ktoś może może udzielić wskazówek, jak mogę to zrobić.

Dziękujemy i poważaniem

Odpowiedz

4

Jeśli można przekazać nazwę użytkownika, locationid i zmienne imageName do skryptu, można usunąć pliki przy użyciu unlink():

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; 

unlink($path . $imagename); 
unlink($path . 'Thumbnails/' . $imagename); 

Ponieważ jesteś interakcji z system plików, będziesz chciał się upewnić i zdezynfekować zmienne (uniemożliwić komuś korzystanie z ../../../ do niechcianych części twojego systemu plików).

$username = str_replace(array('..', '/', '\\', ':'), '', $username); 
$imagename = str_replace(array('..', '/', '\\', ':'), '', $imagename); 
$locationid= str_replace(array('..', '/', '\\', ':'), '', $locationid); 
+1

może również chcesz, aby upewnić się uciec .. znaków w nazwie pliku w przeciwnym razie może coś jak „../../../public/index.php” –

+1

+1, zabawne, myślimy, że po prostu edytowałem :) –

+1

Nie wiem, czy to idzie bez wspominania, więc wspomnę: twój kod powinien być skonstruowany tak, aby zmienne linie sanitizacji działały przed $ path = i unlink () linie. –

0

Oczywiście JavaScript (po stronie klienta) będzie musiał wezwać URL (po stronie serwera), aby usunąć zdjęcie, które wybrany przez użytkownika. Proponuję, że na razie robisz to statycznie (jeśli później chcesz przejść na coś bardziej dynamicznego, krok do przekształcenia się w ajax w raczej niewielkim

Tak jak powiedział Set Sail Media, będziesz musiał podać nazwę użytkownika i locationID na swój serwer po kliknięciu przycisku usuwania Jednym ze sposobów, aby to zrobić jest:

Podczas renderowania galerii w HTML/javascript, dla każdego obrazu, masz pod nim, który będzie zawierał potrzebne informacje, a przycisk przesyłania będzie po prostu wywołaj skrypt usuwania ze swojego serwera. Przykład formularza, który możesz wykonać:

<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> 
     <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> 
     <input type="hidden" name="locationId" value="locationOfThePicture" /> 
     <input type="submit" value="delete"/> 
    </form> 

Formularz będzie przechowywać wymaganą wartość w ukrytych polach, które nie będą wyświetlane na stronie internetowej, ale nadal będą wysyłane do serwera po naciśnięciu przycisku wysyłania.

(dla małej historii, zastosowana tutaj metoda to GET, ponieważ AFAIK HTML nie obsługuje metody DELETE (która byłaby odpowiednia w naszym przypadku)).

Metoda GET wywoła skrypt "your.server.org/deleteImage.php". W tym skrypcie będziesz mieć wszystkie potrzebne informacje (nazwa użytkownika/identyfikator miejsca), aby usunąć obraz za pomocą zmiennych $ _GET ['username'] i $ _GET ['locationId']. Następnie, jak wspomniałeś, będziesz musiał użyć metody odłączenia, aby faktycznie usunąć plik z serwera.

Wreszcie, gdy już to zrobisz, musisz przekierować skrypt php, aby po usunięciu obrazu ponownie wyświetlić galerię (na przykład). Można to zrobić, wywołując skrypt, jeśli masz jakiś silnik szablonów lub wywołując funkcję "nagłówka" php.

Mam nadzieję, że ten przepływ był tym, czego się spodziewałeś i mam nadzieję, że byłam pomocna.

pozdrowienia,

Niedźwiedź

+0

Witam z @bear foot, dziękuję bardzo za poświęcenie czasu, aby wyjaśnić wszystko, jest bardzo mile widziane. Jak już wspomniałem w moim oryginalnym poście, jestem naprawdę bardzo nowy, więc czasami może mi to trochę pomóc przetrawić szczegóły techniczne, które nam przekazałeś. Mogę więc mieć trochę pytań później. Z pozdrowieniami – IRHM

+1

Bez problemu. Nie spiesz się, ciesz PHP i oczywiście nie ma czegoś takiego jak głupie pytanie. Jeśli nie możesz znaleźć prostej odpowiedzi na php.net (która jest całkiem dobrą biblią php) lub w Google, możesz zapytać. BR, Bear –

+0

Wielkie dzięki @bear foot, to zabawne, że właśnie patrzyłem na php.net. Z poważaniem – IRHM

Powiązane problemy