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: 21 | UU: 417
[PHP] Jak wgrać na serwer wiele plików na raz?
1 wrzesień 2007

Za pomocą PHP, łatwo dodać do formy pole typu file dzięki czemu można wgrać jeden plik na serwer wraz z innymi danymi formy. Ale co jeżeli zachodzi potrzeba wgrania wielu plików na raz? (Podobna funkcjonalność jak w załącznikach w Gmail). Można to osiągnąć w prosty sposób, za pomocą pętli for. Za chwilę zostanie przedstawiony kod do zrobienia tego!

Pierwszą rzeczą jaką musisz zrobić, to zapytać użytkownika jak wiele plików będzie on chciał wgrać. Liczba ta określi ile pól, potrzebnych do wgrania plik, zostanie przedstawionych. Metoda ta stworzy pola na kolejnej stronie, ale sugeruję żeby wykorzystać do tego DHTML dzięki czemu wybór ilości pól do przedstawienia spowoduje ich natychmiastowe utworzenie. Dla tego przykładu prostota jest kluczem, stąd dynamicznym tworzeniem pól zajmiemy się w innej poradzie.

Oto pierwszy krok, nazwijmy go "zapytaj.html".

Kod: html4strict

<html>
<head>
<title>Wybierz ilość plików do wgrania</title>
</head>
<body>
<form name="form1" method="post" action="pokarz.php">
  Ile plików chciałbyś wgrać? (Max = 9).
 
    <input name="ilePlikow" type="text" id=" ilePlikow " maxlength="1" />
 
 
    <input type="submit" name="Submit" value="Dalej" />
 
</form>
</body>
</html>

Zauważ – ustawiliśmy 9 jako maksymalną ilość plików do wgrania. Zabezpieczy to serwer przed nadmiernym obciążeniem. Oczywiście możesz kod zmodyfikować wedle własnych potrzeb.

Tutaj jest kod dla pliku "pokarz.php", który utworzy tyle pól potrzebnych do wgrania plików, ile określił użytkownik na poprzedniej stronie.

Kod: html4strict

<html>
<head>
<title>Wgraj pliki</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="zaladuj.php">
 
  <?
  $ilePlikow = $_POST["ilePlikow"];
  for($i=0; $i < $ilePlikow; $i++){
  ?>

    <input name="plik<? echo $i;?>" type="file" id="plik<? echo $i;?>" />
 
  <? } ?>
 <input name="ilePlikow" type="hidden" value="<? echo $ilePlikow;?>
" />
    <input type="submit" name="Submit" value="Dodaj" />
 
</form>
</body>
</html>

Nareszcie, poniżej jest kod umieszczony w pliku "zaladuj.php”, w którym pętla przechodzi przez wszystkie pola i przetwarza wgrane pliki;

Kod: php

<?
// gdzie zostanie umieszczony plik
$sciezka_docelowa = "wgranepliki/";
$ilePlikow = $_POST["ilePlikow"];
for($i = 0; $i < $ilePlikow; $i++){
    // pobranie nazwy pliku
    $nazwa_pliku = $_FILES["plik". $i]["name"];
$nazwa_pliku = stripslashes($nazwa_pliku);
    $nazwa_pliku = str_replace("’","",$nazwa_pliku);
    // kopiowanie pliku tymczasowego na serwerze do miejsca docelowego
    if (copy($_FILES["plik". $i]["tmp_name"], $sciezka_docelowa.$nazwa_pliku)) {
        echo "$nazwa_pliku | plik wgrany!<br>";
    } else {
        echo "$nazwa_pliku | nie można było wgrać pliku!<br>";
    }
}
?>

Ważne – kiedy użytkownik na drugiej stronie wybierze pliki do wgrania i kliknie przycisk "Dodaj", pliki zostaną skopiowane na serwer do folderu tymczasowego. Nazwy tych plików wraz ze ścieżką tego folderu zawarte są w zmiennej $_FILES["plik". $i]["tmp_name"], natomiast w zmiennej $_FILES["plik". $i]["name"] przechowywana jest oryginalna nazwa wgranego pliku.

Autor: Adam Tarkowski 

Dodaj komentarz









Komentarze
12 odpowiedzi
Fishu
14 październik 2011, godz. 11:16

Dreamweaver na dłuższą metę 9gdy skończ się trial) jest płatny… oczywiście można piracić ale po co skoro jest darmowa Aptana Studio 3 która w tym zakresie potrafi to samo a miejscami nawet więcej.

próf
27 styczeń 2009, godz. 9:07

A nie “pokaż” ?? :D

Anonim
20 styczeń 2009, godz. 1:15

aa

ps
20 styczeń 2009, godz. 1:10

test

ziom
13 listopad 2008, godz. 9:28

musze utworzyc baze danych do ktorej beda zapisawyne pliki tekstowe czy moglibyscie mi pomoc w napisaniu skryptu??

adamt
11 wrzesień 2007, godz. 10:33

Najważniejsze co musisz wiedzieć w takim przypadku to jaka jest dokładna ścieżka do katalogu do którego chcesz wgrać plik, czasami od razu możesz pisać nazwę katalogu tak jak z przykładu, a czasami musisz dopisać coś typu usr/www/ albo wogóle coś innego :), to jest zależne od tego, kto jest dostawcą internetu i jak ma skonfigurowany serwer. Jedno jest pewne, jeżeli napisało że skopiowało plik, to jest on gdzieś napewno. Dobrym programem ftp jest FileZilla, może troszkę Ci uprości zadanie. A do pisania w php wykorzystaj Dreamweavera, ma opcję natychmiastowego zapisywania na serwer :)

adamt
11 wrzesień 2007, godz. 10:29

$sciezka_docelowa = “wgranepliki/”; tą linijke musisz zmodyfikować tak żeby Ci pasowała nazwa, albo możesz zostawić. Ogólnie chodzi o to że na serwerze musisz mieć utworzony katalog, np. “wgranepliki/”. Serwer kiedy odbierze plik kopiuje go do folderu tymaczowego, a komenda copy(…) kopiuje ten plik już do folderu docelowego, tego z przykładu. Jeżeli napisało że skopiowało plik to napewno jest on na serwerze w katalogu “wgranepliki/”.

czaki
11 wrzesień 2007, godz. 9:11

dzięki za podpowiedz mistrzu, ale do mnie trzeba mówić duzymi literami bo dopiero od 2 tyg ćwicze html a php od tygodnia a co się z tym wiąże jak piszesz że mam coś sprawdzić to nic mi to nie mówi bo nie wiem jak. Musze stworzyć tmp_name ??? jako katalog ?

czaki
11 wrzesień 2007, godz. 9:06

ok. jest info, że plik wgrany ale nie ma go w katalogu, w zasadzie nigdzie go nie ma, to gdzie mogło go wgrać ?

adamt
11 wrzesień 2007, godz. 7:14

może problem ze ścieżkami?? zamin uruchomisz copy najpierw sprawdz czy plik $_FILES[”plik”. $i][”tmp_name”] istnieje, potem sprawdz co zawiera się w $sciezka_docelowa.$nazwa_pliku, i czy ścieżka docelowa też istnieje. u mnie działa bez problemu, jedyny problem jaki możesz mieć to źle ustawione ścieżki lub nie utworzony folder docelowy

czaki
11 wrzesień 2007, godz. 11:59

nie mozna wgrac pliku .. why ???

czaki
11 wrzesień 2007, godz. 11:39

nie dziala …. co jest ?

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