CompZone.Org :: Artykuły :: PHP
Pytania w drugiej edycji Testu PHP powinny być:
Trudniejsze
Łatwiejsze
Skomplikowane
Na myślenie
Do liczenia
Sonda Wyniki

Add to Google

Upload plików w PHP

Z artykułu dowiemy się jak z poziomu przeglądarki internetowej z pomocą PHP wrzucić (zuploadować) dowolny plik na serwer.

W artykule skorzystamy z funkcji move_uploaded_file.

Na samym wstępie proponuje utworzyć formularz w html, dzięki któremu będziemy mogli wskazać plik do wysłania.

formularz.html

  
<form method="post" action="wyslij.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1024">
Wybierz plik do wysłania:
<input type="file" name="plik" size="30"><br>
<input type="submit" value="Wyślij">

Jedyne co wymaga wyjaśnienia to:

  
<input type="hidden" name="MAX_FILE_SIZE" value="1024">

Jest to ukryte pole które ustala maxymalną wielkość (w bajtach) jaką może mieć przesyłany plik, w moim przykładzie 1024 :)

  
<input type="file" name="plik" size="30"><br>

Wartość name z powyższego fragmentu u mnie <b>plik</b> będzie przekazywana do skryptu PHP, co będzie zresztą później widać.

To tyle z html teraz przejdźmy do skryptu php, który zajmie się przesłaniem pliku z naszego dysku na serwer. Jest to dosłownie linijka kodu.

wyslij.php

  
<?php
move_uploaded_file($_FILES['plik']['tmp_name'], "wyslane/".$_FILES['plik']['name']);
?>

Jak to działa ?

Aby przesłać plik przekazujemy funkcji dwie informacje: - Tymczasowa nazwa pliku przydzielona przez serwer - Miejsce zachowania pliku

W tym celu wykorzystujemy tablicę $_FILES. Powyższy kod spowoduje zapisanie wybranego pliku w folderze wyslane pod jego oryginalną nazwą.

Uwaga

Folder do którego wysyłany jest plik musi mieć odpowiednie prawa zapisu (777).

Oto jakie informacje można jeszcze uzyskać z tablicy $_FILES:

  • $_FILES['userfile']['name'] - nazwa wysyłanego pliku
  • $_FILES['userfile']['type'] - typ wysyłanego pliku
  • $_FILES['userfile']['size'] - rozmiar wysyłanego pliku w bajtach
  • $_FILES['userfile']['tmp_name'] - tymczasowa nazwa pliku przydzielona przez serwer
  • $_FILES['userfile']['error'] - kod błędu jeżeli jakiś wystąpił

'userfile' jest to wartość parametru name="" ustalona w formularzu html. W moim przykladzie name="plik".

Nie można zapomnieć o funkcji która sprawdzi czy wysyłany plik został poprawnie zapisany na serwerze. Skrypt który to sprawdzi wygląda następująco, a funkcja która się tym zajmuje to is_uploaded_file.

  
<?php
if (!is_uploaded_file($_FILES['plik']['tmp_name'])) {

die ('Nie wysłano pliku, spróbuj później.');

}
?>

Uwaga

Należy zauważyć, że ten skrypt jest wolny od zabezpieczeń i jeżeli folder do którego wysyłamy pliki jest dostępny z przeglądarki potencjalny włamywacz może wysłac niebezpieczny skrypt *.php i go wykonać. Najlepszym rozwiązaniem jest utworzyć folder poza drzewem katalogów i w nim trymac uploadowane pliki.

poprawiona wersja kodu:

  
<?php
$
rot = $_SERVER['DOCUMENT_ROOT'];

move_uploaded_file($_FILES['plik']['tmp_name'], "$rot/../wyslane/".$_FILES['plik']['name']);
?>

Źródło:

http://pl.php.net/manual/en/function.is-uploaded-file.php http://pl.php.net/move_uploaded_file http://pl.php.net/manual/en/function.is-uploaded-file.php

jedre @ 10-07-2006 17:37
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!