27
sty
08

[php] [t] Upload pliku. Jak zrobić?

Przesyłanie plików na serwer to częsta czynność, która umożliwia dołączanie zdjęć do ogłoszeń, dokumentów binarnych do plików tekstowych, czy też pozwala na uzupełnienie Twoich zasobów o dowolne pliki. Oto gotowa strona index.php, która umożliwia wysłanie pliku przez przeglądarkę i przyjęcie go na serwerze.

<!doctype html public “-//w3c//dtd html 4.0 transitional//en”>

<html><head><meta http-equiv=”content-type” 

content=”text/html; charset=iso-8859-2″>

<title>tytuł strony</title></head><body>

<?

if (is_uploaded_file($plik1)) {

  $nazwa = uniqid(“”).$plik1_name;

  $wielkosc = $plik1_size;

  echo “Plik <b>$nazwa</b> ($wielkosc) został przesłany!”;

  move_uploaded_file($plik1, “/home/http/www/katalog/$nazwa”);

}

?>



<form action=”index.php” method=”post” enctype=”multipart/form-data”>

<input type=”hidden” name=”MAX_FILE_SIZE” value=”120000″>

<input name=”plik1″ type=”file”>

<input type=”submit” value=” wyślij “> 

</form>

</body></html>

Na początku musisz skonstruować odpowiedni formularz na stronie aby umożliwić wybranie pliku do wysłania. Metoda wysyłania musi być zadeklarowana jako post, a typ danych koniecznie ustaw na multipart/form-data ponieważ nie będzie to standardowy tekst tylko dowolne dane (również binarne).

Następnie w ukrytym polu formularza ustaw zmienną MAX_FILE_SIZE na wielkość, której nie może przekroczyć przesyłany plik. W naszym przykładzie formularz prześle pliki o wielkości do 120 kb. Takie zabezpieczenie jest ważne, bo ktoś może Ci przesłać np. zawartość całego CD-ROMu, co nie jest miłym dowcipem.

Dodaj jeszcze pole umożliwiające wybór pliku (type=”file”) i nadaj mu dowolna nazwę (w przykładzie jest to plik1).

Teraz po wybraniu pliku i wciśnięciu guzika “wyślij”, plik zostanie odebrany przez skrypt PHP. Skrypt może być w tym samym pliku co formularz (tak jest w przykładzie) albo w innym, w zależności od Twoich potrzeb.

Pierwszą rzeczą jest sprawdzenie za pomocą funkcji is_uploaded_file(), czy został przesłany plik. Zmienna $plik1 przechowuje nazwę pliku tymczasowego, znajdującego się na serwerze zwykle w katalogu /tmp/ lub innym, tymczasowym.

Następnie pobieramy nazwę pliku i jego wielkość poprzez dodanie do nazwy zmiennej cząstek _name i _size. Warto wypisać na ekranie wielkość i nazwę pliku aby pokazać użytkownikowi, że wszystko poszło dobrze i plik został przesłany.

Pozostała nam jeszcze jedna, ważna czynność. Plik trzeba przenieść z katalogu tymczasowego (gdzie jego nazwa jest mocno przypadkowa, a serwer i tak skasuje go po pewnym czasie) do miejsca, gdzie będzie dostępny cały czas i zapisany pod nazwą oryginalną. Funkcja move_uploaded_file() w sposób bezpieczny kopiuje plik do podanego katalogu.

Miejsce do którego chcesz skopiować plik musi być dostępne do zapisu, a więc katalog powinien mieć prawa zapisu dla każdego (chmod 777). Ścieżka musi być podana w sposób bezwzględny, jak w przykładzie - nie może to być np. “../katalog/”.

Nazwę zapisywanego pliku na serwerze musisz zmodyfikować, ponieważ dwie różne osoby mogą wysłać plik o tej samej nazwie! W przykładzie do oryginalnej nazwy dodałem wygenerowany przez funkcję uniqid(”") unikalny identyfikator. Możesz zrezygnować z nazwy oryginalnej i tworzyć nazwę własną, wykorzystującą identyfikatory lub aktualną datę.
autor: Dariusz Majger


2 Odpowiedzi do “[php] [t] Upload pliku. Jak zrobić?”


  1. 1 flegmatyk marzec 3, 2008 @ 6:48 pm

    >

    Można tę wartość zmienić bez większych problemów, chociażby za pomocą Opery, albo wysłać zmodyfikowane dane metodą POST za pomocą chociażby cURL. Tak więc to nie jest żadne zabezpieczenie, jak ktoś będzie chciał, to i o wiele większy plik prześle. Trzebaby to zdefiniować wewnątrz kodu PHP, a nie odbierać od użytkownika.

  2. 2 Anonim czerwiec 10, 2008 @ 2:40 pm

    Czy to działa?

Napisz odpowiedź




Archiwa

Kategorie

Blog Stats

  • 7,769 hits