BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 19 | UU: 416
[PHP] Jak wgrać jednocześnie za pomocą jednego formularza kilka plików na serwer?
29 maj 2007

W tej poradzie przedstawię sposób napisania skryptu wykorzystującego jeden formularz do wgrania na serwer kilku plików jednocześnie.

Skrypt podzielony zostanie na dwa pliki: form_upload.php i skrypt_upload.php. Należy również stworzyć katalog do którego będziemy wgrywać pliki. Niech będzie to katalog upload. Należy pamiętać aby katalog ten miał prawa dostępu ustawione na 777.

Tworzenie pliku form_upload.php

Kod: html4strict

<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr>
   <form action="skrypt_upload.php" method="post" enctype="multipart/form-data" name="formularz">
  <td>
   <table width="100%" border="0">
    <tr>
     <td>
      <strong>Formularz do wgrywania kilku plików na serwer</strong>
     </td>
    </tr>
    <tr>
     <td>Wybierz plik 1
      <input name="plik[]" type="file" size="100" />
     </td>
    </tr>
    <tr>
     <td>Wybierz plik 2
      <input name="plik[]" type="file" size="100" />
     </td>
    </tr>
    <tr>
     <td>Wybierz plik 3
      <input name="plik[]" type="file" size="100" />
     </td>
    </tr>
    <tr>
     <td align="center">
      <input type="submit" name="Wgraj" value="Wgraj" />
     </td>
    </tr>
   </table>
  </td>
  </form>
 </tr>
</table>

W pliku form_upload.php znajduje się formularz, za pomocą którego wskazywane będą pliki, które chcemy wgrać na serwer. W tym formularzu są trzy pola do określenia ścieżki plików oraz jeden przycisk "wgraj" wywołujący formularz. Można takich pól do wgrania zdjęć stworzyć oczywiście więcej. Po wciśnięciu przycisku wgraj, akcja z formularza przenoszona jest do pliku skrypt_upload.php. Przejdźmy zatem do następnego kroku, aby dowiedzieć się co się dalej dzieje.

Tworzenie pliku skrypt_upload.php

Kod: php

<?php
//określamy ścieżki do obrazków

//dla przykładowego pliku obraz.gif
//będzie to upload/obraz.gif
$sciezka1= "upload/".$HTTP_POST_FILES[‘plik’][‘name’][0];
$sciezka2= "upload/".$HTTP_POST_FILES[‘plik’][‘name’][1];
$sciezka3= "upload/".$HTTP_POST_FILES[‘plik’][‘name’][2];

 
//kopiujemy plik do katalogu
copy($HTTP_POST_FILES[‘plik’][‘tmp_name’][0], $sciezka1);
copy($HTTP_POST_FILES[‘plik’][‘tmp_name’][1], $sciezka2);
copy($HTTP_POST_FILES[‘plik’][‘tmp_name’][2], $sciezka3);

 
//$HTTP_POST_FILES[’plik’][’name’] = nazwa pliku
//$HTTP_POST_FILES[’plik’][’size’] = rozmiar pliku
//$HTTP_POST_FILES[’plik’][’type’] = typ pliku
 
echo "Nazwa pliku:".$HTTP_POST_FILES[‘plik’][‘name’][0]."<br/>";
echo "Rozmiar pliku:".$HTTP_POST_FILES[‘plik’][’size’][0]."<br/>";
echo "Typ pliku:".$HTTP_POST_FILES[‘plik’][‘type’][0]."<br/>";
echo "<img src=\"$sciezka1\">";
echo "<br /><br />";
 
echo "Nazwa pliku:".$HTTP_POST_FILES[‘plik’][‘name’][1]."<br/>";
echo "Rozmiar pliku:".$HTTP_POST_FILES[‘plik’][’size’][1]."<br/>";
echo "Typ pliku:".$HTTP_POST_FILES[‘plik’][‘type’][1]."<br/>";
echo "<img src=\"$sciezka2\">";
echo "<br /><br />";
 
echo "Nazwa pliku:".$HTTP_POST_FILES[‘plik’][‘name’][2]."<br/>";
echo "Rozmiar pliku:".$HTTP_POST_FILES[‘plik’][’size’][2]."<br/>";
echo "Typ pliku:".$HTTP_POST_FILES[‘plik’][‘type’][2]."<br/>";
echo "<img src=\"$sciezka3\">";
?>

Już na początku skryptu określamy zmienne $sciezka1 2 i 3, tak by móc wyświetlić wgrane pliki.

Najważniejszym miejscem w skrypcie jest fragment, w którym kopiujemy pobrane z formularza pliki - copy($HTTP_POST_FILES[’plik’][’tmp_name’][0], $sciezka1). Pierwszy argument funkcji copy() pobiera z formularza pole o nazwie plik. Należy zwrócić uwagę na zapis [’tmp_name’], który powoduje stworzenie w locie pliku o tymczasowej nazwie, którą taki zapis generuje. Jest to konieczne przy kopiowaniu, gdyż w pewnym momencie istnieją dwie kopie pliku, które muszą różnić się nazwami. [0] - jest to zerowy indeks tablicy plik[], który określa jaki plik kopiujemy. Drugim argumentem funkcji copy() jest ścieżka do kopiowanego pliku.

W dalszej części mamy jeszcze takie zapisy jak: $HTTP_POST_FILES[’plik’][’name’] określający nazwę pliku, $HTTP_POST_FILES[’plik’][’size’] określający rozmiar pliku i HTTP_POST_FILES[’plik’][’type’] określający typ wgrywanego pliku. Dzięki poleceniu echo połączonego z tymi zapisami, po wgraniu plików na serwer pojawią się dane na temat tych plików oraz wyświetlony zostanie sam plik (o ile wgrany został plik graficzny:).

Opracowanie: Adam Suchowski

Dodaj komentarz









Komentarze
13 odpowiedzi
zenon
16 czerwiec 2008, godz. 2:55

Wszystko działa, tylko niektórym się już w ogóle myśleć nie chce.

dona
16 czerwiec 2008, godz. 2:53

No i oczywiście pamiętajcie aby stworzyć katalog, w którym mają się pojawić pliki oraz nadać mu prawa 777

dona
16 czerwiec 2008, godz. 2:48

Sprawdźcie przy kopiowaniu apostrofy. Czasem trzeba je zmienić na prawidłowe swoją klawiaturą i wszystko będzie działać. :)

fkórzony
7 czerwiec 2008, godz. 10:26

Następna strona od siedmiu boleści. Jak można zamieścić skrypt, opisać go, a nie sprawdzić czy działa. Całkowity brak profesjonalizmu

koles
15 kwiecień 2008, godz. 4:20

hmmm ten sktyp nie dziala :)

17 marzec 2008, godz. 5:31

nie chodzi
i nie ma zamiaru chodzić
powinienem zmienić .htaccess?

27 luty 2008, godz. 8:26

CHMODy ustawcie na “777″ (jak wam nie chodzi ten upload plikow)

28 listopad 2007, godz. 2:11

Hi boys!702a9c

roman
11 wrzesień 2007, godz. 9:58

Dobrze przekopiuj i sprawdź czy Twoja wersja PHP dobrze odczytuje zmienne globalne.

czaki
11 wrzesień 2007, godz. 8:09

dlaczego to nie działa ?

adamt
20 sierpień 2007, godz. 10:00

Musisz poczytać help’a do tego panelu, lub możesz umieścić tekst z helpa na forum to Ci go przetłumaczymy jeżeli jest po angielsku.

16 sierpień 2007, godz. 7:38

jak wgrac extreme warstad panel do warów z counter strike:) Jak mam go wgrać na strone w serwisie BNX.pl??:P

16 sierpień 2007, godz. 7:14

Kurcze jak to zrobić?? Chciałbym wgrać extreme panel. To panel warów:D

 
 
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker