YGREG.COM - Obsługa upload'u plików w PHP 

29.07.2004
Nowa oferta hostingowa.

29.07.2004
Kurs XPath.

13.10.2002
Poprawiony problem z oznaczaniem przeczytanych wiadomości na forum.

13.06.2002
PHP z Zend Engine 2 już dostępne!

17.02.2002
Zmiany w organizacji serwisu.








Początek strony

(C)opyright 1997-2007
by Grzegorz Plebański
INDEX I ARTYKUŁY I SKRYPTY I DOWNLOAD

Dodaj stronę
do ulubionych

Artykuły i kursy
   PHP
   XML
   CGI
   HTML
   Inne

Skrypty PHP
   Komunikacja
   Księgi gości
   Statystyki
   Głosowania
   Bannery
   Inne
Skrypty CGI

Download



Obsługa upload'u plików w PHP


        W PHP można w dość prosty sposób obsłużyć formularz zawierający pole do upload'owania plików. Pola te są obsługiwane przez większość przeglądarek (IE 4.0, lub 3.0 z odpowiednią łatą, oraz Netscape 3.0).
        Zaczniemy od stworzenia odpowiedniego formularza:

   
<FORM ACTION=upload.php3 
METHOD=POST 
ENCTYPE="multipart/form-data">
   <INPUT TYPE=HIDDEN 
   NAME=MAX_FILE_SIZE VALUE=50000>
   <INPUT NAME=pliczek TYPE=FILE>
   <INPUT TYPE=SUBMIT VALUE=OK>
</FORM>

        Kod ten spowoduje wyświetlenie na stronie pola na wpisanie nazwy pliku, oraz przycisku pozwalającego na wygodne wybranie pliku. Ukryte pole MAX_FILE_SIZE określa, jaka jest maksymalna wielkość pliku, który użytkownik może wysłać (w bajtach). Nie może on być jednak większy od maksymalnego rozmiaru ustawionego w konfiguracji serwera.
        Skoro mamy już formularz wysyłający plik, wypadałoby jeszcze coś z nim zrobić w skrypcie upload.php3. W skrypcie będziemy mieli do dyspozycji kilka zmiennych zawierających różne informacje o przysłanym pliku:
$pliczek - tymczasowa nazwa pod jaką został zapisany plik. Plik ten zostanie usunięty po zakończeniu działania skryptu.
$pliczek_name - nazwa pod jaką plik był zapisany na komputerze z którego go wysłano.
$pliczek_size - rozmiar pliku (w bajtach).
$pliczek_type - typ pliku (np. text/html, image/gif itp.), ale tylko jeżeli przeglądarka przyśle taką informację.
        Zanim zaczniemy coś robić z otrzymanym plikiem należy dla bezpieczeństwa sprawdzić, czy rzeczywiście pochodzi on z formularza. Można to zrobić funkcją is_uploaded_file:

   
if(is_uploaded_file($pliczek))
{
   // ten plik rzeczywiście 
   // przyszedł z formularza
}
else
{
   // ten plik nie pochodzi
 z formularza
}

        Jest to dość ważne, ponieważ bez tego można bardzo łatwo oszukać taki skrypt, aby zrobił coś z dowolnym plikiem na serwerze (np. wywołując upload.php3?pliczek=/etc/passwd). Jeżeli chcemy przenieść gdzieś przysłany plik, można użyć funkcji move_uploaded_file:

   
move_uploaded_file($pliczek, 
   "uploady/$pliczek_name");

        Nie trzeba wtedy sprawdzać, czy plik rzeczywiście pochodzi z formularza - funkcja move_uploaded_file robi to automatycznie.
        Jak zwykle zapraszam do wpisywania pytań i komentarzy na forum.


Grzegorz 'Ygreg' Plebański
ygreg@ygreg.com
http://www.ygreg.com