kursy , szkolenia warszawa , e-book , audio book , poradniki , jak zarabiać , pieniądze , biznes , marketing e-commerce , e-biznes , zarabianie w sieci , servicetek group Bogdan Markowicz SG ,3 d e-learning , second life w edukacji , edukacja , 3d E-learning kursy i szkolenia Online |||S|G||| – Kurs PHP cz 13 Upload plików

Kurs PHP cz 13 Upload plików

Post image of Kurs PHP cz 13 Upload plików

13. Upload plików

13.1. Kilka słów o uploadzie

Jeśli dysponujemy kontem WWW np. w Interii lub Lycos, na pewno spotkaliśmy się z klientem FTP dostępnym z poziomu przeglądarki WWW. Nie jest to jednak zbyt praktyczne rozwiązanie, szczególnie gdy chcemy umieszczać na stronie pliki o dużym rozmiarze, ale świetnie się ono sprawdza w wypadku małych zbiorów, takich jak pliki HTML. Spróbujmy coś takiego napisać.

13.2. Najpierw formularz

Należy zacząć od przygotowania formularza, w którym odwiedzający wskaże pliki do wysłania. W znaczniku form należy umieścić informację, że wysyłane będą dane (enctype=?multipart/form-data?); ważne jest również to, by wartość metody ustawić na post. Na końcu należy dodać komponent typu file, dzięki któremu gość wskaże plik do wysłania.

Plik formularz.html:

<form enctype=”multipart/form-data” action=”up.php” method=”post”>
<input type=”file” name=”plik”>
<input type=”submit” value=”Wyślij na serwer”>
</form>

13.3. Odbiór pliku w teorii

Po wysłaniu danych w pliku up.php dostępna będzie wielowymiarowa tablica $_FILES ? pierwszym wymiarem będą nazwy pól file z formularza, a drugim następujące dane o wysłanym pliku:

  • name ? oryginalna nazwa pliku (taka jaka u użytkownika),
  • tmp_name ? tymczasowa nazwa pliku (użyta zostanie do skopiowania do folderu docelowego),
  • size ? wielkość w bajtach,
  • type ? typ MIME pliku (np. text/html),
  • error ? (dodane w PHP 4.2) zwraca kod błędu, o ile taki wystąpił.

13.4. Kody błędów

  • nie wystąpił błąd ? plik wysłany poprawnie,
  • wielkość pliku przekracza wartość maksymalną określoną w dyrektywie upload_max_filesize,
  • wielkość pliku przekracza wartość maksymalną określoną w polu MAX_FILE_SIZE formularza,
  • plik został wysłany częściowo,
  • żaden plik nie został wysłany.

Wyjaśnić należy chyba tylko błąd numer 2. W formularzu, z którego wysyłane będą pliki, można umieścić pole typu hidden o nazwie MAX_FILE_SIZE, gdzie należy podać maksymalną wielkość pliku do wysłania. Dla przykładu:

<input type=”hidden” name=”MAX_FILE_SIZE” value=”30000″ />

MAX_FILE_SIZE zależne jest od przeglądarki i nie można na nim polegać w stu procentach. Na przykład wczesne wersje Firefoksa nic sobie nie robiły z obecności takiego pola i pozwalały wysłać plik. PHP sprawdza jednak wielkość pliku i wyświetla błąd nr 2.

Przyszedł czas na zbiór up.php ? dzięki niemu plik jest odbierany i zapisywany na serwerze.

<?
$uploaded = “var/www/uploady/”. $_FILES['plik']['name'];
if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
if ($_FILES['plik']['size'] > 1024*1024*1024) {
echo ‘Plik jest za duży’;
} else {
move_uploaded_file($_FILES['plik']['tmp_name'],$uploaded);
echo “Operacja przebiegła pomyślnie”;
}
} else {
echo ‘Błąd przy przesyłaniu danych!’;
}
?>

Najpierw należy sprawdzić, czy plik został na pewno wysłany przez formularz. W przeciwnym wypadku istnieje możliwość ominięcia zabezpieczeń i uruchomienia np. dowolnego skryptu PHP. Jeśli plik nie został wysłany, pokazywany jest błąd. Następnie sprawdzana jest wielkość pliku, która na poniższym przykładzie nie może przekroczyć 1 MB ? 1073741824 bajtów. Jeśli jego wielkość jest większa, pokazywany jest błąd. Jeżeli nie, to plik zostaje przeniesiony na właściwe miejsce i wypisywane jest potwierdzenie, że operacja przebiegła pomyślnie.
Skrypt, który odbiera plik, powinien zawierać kod określający, co stanie się z wysłanym plikiem. Możemy więc usunąć pliki za duże lub za małe. Dla przykładu:

if ($_FILES['plik']['size'] > 1073741824

lub odebrać tylko pliki graficzne:

if ($_FILES['plik']['type']==”image/jpeg”
|| $_FILES['plik']['type']==”image/gif”))

Pamiętajmy, że od PHP 4.2.0 możemy używać funkcji $_FILES['plik']['error'], aby sprawdzić, co poszło nie tak.
Jeśli podczas uploadu plików odkryjemy, że tablica $_FILES jest pusta, to oznacza, iż wielkość przesyłanego pliku przekracza wielkość ustawioną w dyrektywie post_max_size pliku php.ini.

13.5. Upload wielu plików

Jeśli potrzebujemy wysłać więcej niż jeden plik z formularza, możemy się posłużyć jedną z dwóch metod: nadać każdemu komponentowi file inną nazwę lub wykorzystać tablicę. Oto zmodyfikowany plik formularz.html:

<form enctype=”multipart/form-data” action=”up.php” method=”post”>
<input type=”file” name=”plik[]“>
<input type=”file” name=”plik[]“>
<input type=”file” name=”plik[]“>
<input type=”submit” value=”Wyślij na serwer”>
</form>

A oto up.php po drobnych przeróbkach:

<?
for ($i=0; $i<sizeof($_FILES['plik']['size']); $i++) {
if ($_FILES['plik']['size'][$i] !=0) {
$uploaded = “var/www/uploady/”. $_FILES['plik']['name'][$i];
if (is_uploaded_file($_FILES['plik']['tmp_name'][$i])) {
if ($_FILES['plik']['size'][$i] > 1024*1024*1024) {
echo “Plik numer $i jest za duży<br />”;
} else {
move_uploaded_file($_FILES['plik']['tmp_name'][$i],
$uploaded);
echo “Operacja wysyłania pliku $i
przebiegła pomyślnie<br />”;
}
} else {
echo “Błąd przy przesyłaniu danych w pliku $i!<br />”;
}
}
}
?>

Posted by Bogdan Markowicz   @   28 Listopad 2009

Like this post? Share it!

RSS Digg Twitter StumbleUpon Delicious Technorati Facebook

0 Comments

No comments yet. Be the first to leave a comment !
Leave a Comment

Name

Email

Website

Previous Post
« Kurs systemu zarządzania treścią Joomla!. Część pierwsza: instalacja
Next Post
Kurs PHP cz. 14 Sesje »
Pismo nalezy do Servicetek Group   |   SG e-biznes e-commerce projektowanie www designed by SG Grupa e-learning