sobota, 21 listopada 2009

Jak obsłużyć upload plików na serwer przez użytkowników ?

Upload plików w PHP jest bardzo prosty. Najpierw potrzebujemy formularza dzięki któremu użytkownik będzie mógł wybrać plik do wgrania na serwer:

<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">

Wybierz plik który chcesz umieścić na serwerze:


<input type="file" name="pliczek" size="40">

<input type="submit" value="Wgraj plik">




Ukryte pole formularza MAX_FILE_SIZE określa oczywiście maksymalny rozmiar pliku jaki może być uploadowany w bajtach. Teraz czas na obsługę uploadu czyli w przypadku tego formularza plik upload.php. Gwoździem programu jest funkcja move_uploaded_file. jako pierwszy argument podajemy tymczasową nazwę uplodowanego pliku, a jako drugi nazwę, gdzie chcemy go zachować. Skąd wziąść tą pierwszą ? Z tablicy $_FILES. Przykład:

<? move_uploaded_file($_FILES['pliczek']['tmp_name'],"pliki/".$_FILES['pliczek']['name']); ?>



Plik zostanie zapamiętany w katalogu pliki, pod taką nazwą pod jaką został uploadowany. Pamiętaj, że katalog w którym zapamiętujesz pliki musi mieć odpowiednie prawa zapisu (chmod 777 pliki). A co jeszcze można znaleźć w tej tajemniczej tablicy _$FILES ?
name Nazwa uplodowanego pliku
tmp_name Tymczasowa nazwa pliku przydzielona przez serwer
size Rozmiar w bajtach
type Typ pliku np. image/jpeg
error kod błędu jeżeli jakiś wystąpił. Jeżeli nie przyjmuje wartość 0.



I na koniec jeszcze słówko o przydatnej funkcji is_uploaded_file która powie nam czy plik wogóle został wgrany. Jako argument podajemy w naszym przypadku $_FILES['pliczek'].
<? if (!is_uploaded_file($_FILES['pliczek'])) die ('Nie wgrano żadnego pliku'); ?>

czwartek, 19 listopada 2009

$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];

if(is_uploaded_file($plik_tmp)) {
move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
echo "Plik: $plik_nazwa o rozmiarze
$plik_rozmiar bajtów został przesłany na serwer!";
}
?>