Loading:

Książka Zend Framework 3. Poradnik Programisty.

PHP - Formularze [Upload plików]

1.Wprowadzenie
2.Operacje na plikach
3.Pierwsza aplikacja
4.Little zabezpieczenia
5.Zakonczenie


1.Wprowadzenie.


  Artykul ten jest dedykowany osoba ktore juz znaja podstawy PHP, mianowicie operacje na zmiennych, tablicach, plikach, oraz znajacych podstawy HTMLa. Aby przystapic do czytania tego, zalecam przeczytania moich innych artykulow na temat programowania w PHP. Nie bede juz wiecej zamulal, tylko przejdzmy do rzeczy ;)

 

2.Operacje na plikach [$_FILES]


Jest to rzecz, ktora przysparza klopotow osoba ktore znaja sie bardziej, jak i mniej na programowaniu w PHP. Mowa tutao o zmiennej jaka jest $_FILES. Zmienna ta dostarcza w postaci tablicy wszystkich informacji o uploadowanym pliku.
Dla przykladu, napiszemy prosty skrypt, ktory bedzie uploadowal pliki tylko z rozszrzeniami: jpg, jpeg, gif:

Czesc kodu HTML:
<form enctype="multipart/form-data" action="cos.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000" />
<input name="plik" type="file" />
<input type="submit" value="Wyslij plik" />
</form>


Czesc kodu PHP:

<php
$plik_tmp = $_FILES['plik']['tmp_name']; // Tymczasowa nazwa uploadowanego pliku
$plik_nazwa = $_FILES['plik']['name']; // Orginalna nazwa pliku uploadowanego przez uzytkownika
$plik_rozmiar = $_FILES['plik']['size']; // Rozmiar pliku w Byte'ach
$rozmiar = $plik_rozmiar / 1000; // A tu zrobimy z nich kB
$is_obrazek = explode('.', $plik_nazwa); // dzielimy nazwe uploadowanego pliku na tablice
$is_obrazek[1] = strtolower($is_obrazek[1]); // zmniejszamy nazwe rozszerzenia

  if (($is_obrazek[1] == 'jpg')||($is_obrazek[1] == 'jpeg')||($is_obrazek[1] == 'gif')){ // sprawdzamy poprawnosc pliku

if(is_uploaded_file($plik_tmp)) { // Jesli plik zostal poprawnie zuploadowany
  move_uploaded_file($plik_tmp, "gallery/$plik_nazwa"); // Przenosimy
  echo "Plik: $plik_nazwa o rozmiarze
  $rozmiar kB zostaďż˝ przesďż˝any na serwer!"; // Pokaz dane o pliku
}
} else {
  if ($plik_nazwa == NULL) { // Jesli plik jest pusty
  return 0;
  } else { // Jesli format jest zly
  echo 'Nie poprawny format pliku!';
  }
}
?>



Teraz ladnie to postaram sie Wam wytlumaczyc. Chcemy napisac skrypt ktory wysyla na serwer zdjecia i obrazki w formatach: jpg, jpeg, gif. Wiec bierzemy sie do roboty... Zaczynamy od napisania prostego formularza w HTML'u gdzie programujemy wszystko i jaka metoda ma isc. Obrazki beda szly do pliku 'cos.php' metoda POST.
<input type="hidden" name="MAX_FILE_SIZE" value="5000" /> -> Tutaj ukrywamy jaki bedzie maksymalny rozmiar obrazka [w Byte'ach].Teraz zajmijmy sie skryptem 'cos.php'.
<php
$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];
$rozmiar = $plik_rozmiar / 1000;
$is_obrazek = explode('.', $plik_nazwa);
$is_obrazek[1] = strtolower($is_obrazek[1]);

  if (($is_obrazek[1] == 'jpg')||($is_obrazek[1] == 'jpeg')||($is_obrazek[1] == 'gif')){

if(is_uploaded_file($plik_tmp)) {
  move_uploaded_file($plik_tmp, "gallery/$plik_nazwa");
  echo "Plik: $plik_nazwa o rozmiarze
  $rozmiar kB zostaďż˝ przesďż˝any na serwer!";
}
} else {
  if ($plik_nazwa == NULL) {
  return 0;
  } else {
  echo 'Nie poprawny format pliku!';
  }
}
?>


Wpierw, nadajemy krotkie zmienne, po czym dzielimy nazwe pliku na tablice o nazwie $is_obrazek. Dlaczego ? Abysmy mogli porownywac rozszerzenia plikow uploadowanych, z dozwolonymi. Gdy plik przejdzie pomyslnie ta instrukcje warunkowa, przechodzi do kolejnej if(is_uploaded_file($plik_tmp)). Jesli plik sie poprawnie uploadowal, przenosi do folderu "gallery" [za przeniesienie odpowiada move_uploaded_file($plik_tmp, "gallery/$plik_nazwa") ]. Po tym pokazujemy krotkie informacje na temat uploadowanego pliku. Jesli jednak plik nie zostal uploadowany lub nazwa pliku jest inna, zobaczymy blad ;).

Powyzszy kod nie jest zly, na pewno uchroni nas przed 'laikami' jednakze nie przed osobami zaawansowanymi. Zawsze mozna pocudowac z rozszerzeniami i mozna wrzucic na serwer inny plik:).
Pamietajcie, zawsze sie znajdzie jakis blad :) ! [Zapraszam do pkt.4 'Little zabezpieczenia']


Dalsza część: 1 2

Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=5&t=1852

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: Sapcik Ranga: Poziom 1 Punktów:
Komentarze użytkowników
Proponuje rozszerzenie pliku wyciągnąć po przez funkcję pathinfo(), ponieważ rozkładanie nazwy na tablicę według kropki nie zawsze może przynieść wymaganego przez nas efektu.
autor: Puzi | 68 | 2009-01-26 16:04:51


Masz rację jeśli rozbijemy nazwę poprzez explode a nazwa pliku będzie obrazek.jakis.jpg dostaniemy błąd
autor: Igor | 70 | 2009-01-26 16:27:47


Może się zdarzyć powyższa sytuacja, ale nazewnictwo plików ze specjalnymi znakami typu '.', '?' czy '~' nie jest dozwoloną techniką nazywania plików.
autor: Divix | 71 | 2009-01-26 16:28:49


Panowie, artykuł kierowany jest do osób początkujących, i starałem się opierać na funkcjach jak najbardziej przejrzystych, i raczej znanych :) Być może w kolejnych artykułach opisze dokładniej co i jak :) Pozdrawiam
autor: Sapcik | 72 | 2009-01-26 16:34:50


OK ale można zastosować np:
autor: Igor | 73 | 2009-01-26 16:43:00


mimetype do sprawdzania poprawności formatu pliku ;-)
autor: szalik | 391 | 2009-07-27 00:55:14


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors