WebDeveloper
 g│≤wna | forum manual | skrypty |  artyku│y |  projekty | porady |  zasoby |  linki 
dzia│y
  •  manual PHP
  •  skrypty PHP
  •  artyku│y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    news
  • Porcjowanie wynik≤w zapytania
  • Kartki Internetowe
  • PHP + MySQL + Windows 98
  • Bezpieczne uploadowanie plik≤w
  • Przegl▒danie obrazk≤w z bazy PostgreSql.
  • Co to jest WebDeveloper?
  • Instalujemy serwer baz danych !
  • Sesje w PHP4 !
  • Dodaj poradΩ !!!
  • Zastosowano... PHP !
  • redakcja

    Je╢li masz ciekawe informacje odno╢nie PHP, skrypty, porady, linki itp. lub chcia│by╢ wsp≤│tworzyµ serwis PHP.zone.pl daj nam znaµ na email !



    dodaj poradΩ !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Rozdzia│ 18. Obs│uga wysy│ania plik≤w na serwer.

    Wysy│anie metod▒ POST

    PHP potrafi odbieraµ pliki wys│ane przez przegl▒darki obs│uguj▒ce RFC-1867 (Netscape Navigator 3 i nowsze, Microsoft Internet Explorer 3 z patchem, i nowsze). Ta cecha pozwala wysy│aµ zar≤wno pliki binarne jak i tekstowe. Wraz z autentykacj▒ PHP i funkcjami manipuluj▒cymi plikami, masz pe│n▒ kontrolΩ nad tym kto mo┐e wysy│aµ pliki i co ma byµ zrobione z tymi plikami.

    PamiΩtaj tak┐e, ┐e PHP umo┐liwia wysy│anie plik≤w metod▒ PUT u┐ywan▒ przez Netscape Composer i kient≤w W3C's Amaya. Zobacz Wsparcie dla metody PUT.

    Wys│anie pliku mo┐e byµ zrealizowane poprzez specjalny formularz na stronie www:

    Przyk│ad 18-1. Formularz wysy│aj▒cy plik

    <FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
    Wyslij ten plik: <INPUT NAME="userfile" TYPE="file">
    <INPUT TYPE="submit" VALUE="Wy╢lij plik">
    </FORM>
        

    úa±cuch _URL_ powinien wskazywaµ skrypt PHP obs│uguj▒cy nadchodz▒ce pliki. Ukryte pole MAX_FILE_SIZE musi poprzedzaµ pole z nazw▒ pliku, a jego warto╢µ okre╢la maksymalny rozmiar w bajtach tego pliku. W tym docelowym pliku ( _URL_ ) po pomy╢lnym przes│aniu bΩd▒ zdefiniowane nastΩpuj▒ce zmienne:

    • $userfile - tymczasowa nazwa pliku (wys│anego przez przegl▒darkΩ) zapisanego na serwerze (po przes│aniu).
    • $userfile_name - oryginalna nazwa przes│anego pliku
    • $userfile_size - wielko╢µ przes│anego pliku w bajtach
    • $userfile_type - typ mime przes│anego pliku je┐eli przegl▒darka dostarcza takiej informacji, np. "image/gif".

    Zmienna "$userfile" bΩdzie zawieraµ nazwΩ pliku umieszczon▒ w formularzu przy polu TYPE=file (w tym przypadku "userfile")

    Pliki domy╢lnie s▒ zapisywane w katalogu tymczasowym serwera. Katalog ten mo┐na zmieniµ ustawiaj▒c zmienn▒ TMPDIR. Niestety, brak jest mo┐liwo╢ci zdefiniowania tej zmiennej ╢rodowiskowej ze skryptu PHP przy pomocy funkcji putenv().

    Skrypt PHP kt≤ry odbierze nadchodz▒cy plik powinien wykonaµ konieczne okre╢lone czynno╢ci na tym pliku. Mo┐na na przyk│ad u┐ywaj▒c zmiennej $file_size przepuszczaµ do dalszej obr≤bki pliki kt≤re maja okre╢lon▒ wielko╢µ. U┐ywaj▒c zmiennej $file_type mo┐esz przepuszczaµ pliki kt≤re spe│niaj▒ okre╢lone kryteria. Oczywi╢cie pliki nale┐y usuwaµ lub przenosiµ w inne miejsce po ich wykorzystaniu.

    Plik zostanie usuniΩty z katalogu tymczasowego po zamkniΩciu po│▒czenia, w przypadku gdy nie zosta│ przeniesiony lub nie zmieniono jego nazwy.

    NajczΩstsze pu│apki

    MAX_FILE_SIZE nie mo┐e definiowaµ wielko╢ci pliku wiΩkszej ni┐ wielko╢µ okre╢lona przez upload_max_filesize w php.ini lub dyrektywa Apache php_upload_max_filesize. Domy╢lnie 2 MB.

     

    Wysy│anie wielu plik≤w

    Mo┐liwe jest odbieranie przez serwer wielu plik≤w r≤wnocze╢nie i umieszczanie informacji w nich zawartych w tablicy. Aby to zrobiµ nale┐y u┐yµ tej samej tablicy w sk│adni formularza HTML :

    Przyk│ad 18-2. Formularz wysy│aj▒cy wiele plik≤w

    <form action="file-upload.html" method="post" 
    enctype="multipart/form-data">
      Wy╢lij nastΩpuj▒ce pliki:<br>
      <input name="userfile[]" type="file"><br>
      <input name="userfile[]" type="file"><br>
      <input type="submit" value="Wy╢lij pliki">
    </form>
         

    Kiedy powy┐szy formularz zostanie wys│any, tablice $userfile, $userfile_name oraz $userfile_size bΩd▒ dostΩpne globalnie (jak r≤wnie┐ w $HTTP_POST_VARS). Ka┐da z nich bΩdzie tablic▒ indeksowan▒ numerycznie, kt≤rej warto╢ci to wys│ane pliki.

    Dla przyk│adu, /home/test/review.html i /home/test/xwp.out to wy╢│ane plik. W tym przypadku $userfile_name[0] bΩdzie zawieraµ warto╢µ review.html, a $userfile_name[1] bΩdzie zawieraµ warto╢µ xwp.out. Podobnie, $userfile_size[0] bΩdzie zawieraµ wielko╢µ pliku review.html's , itd.

    Wsparcie dla metody PUT

    PHP pozwala na u┐ywanie metody HTTP PUT stosowanej przez Netscape Composer i W3C Amaya. »▒dania PUT s▒ o wiele prostsze ni┐ wysy│anie plik≤w i wygl▒daja jak:

    PUT /katalog/nazwa_pliku.html HTTP/1.1 Powy┐sza linia oznacza, ┐e zdalny klient mo┐e zapisaµ zawarto╢µ pliku: /katalog/nazwa_pliku.html na dysku serwera. Oczywi╢cie nie jest to dobry pomys│ aby ka┐dy m≤g│ zapisywaµ pliki na dysku serwera. Nale┐y okre╢liµ kt≤re skrypty mog▒ siΩ pos│ugiwaµ t▒ metod▒. W Apache'u nale┐y u┐yµ w tym celu dyrektywy Script w pliku konfiguracyjnym, zwylke umieszczonej wewn▒trz bloku <Directory> b▒d╝ <Virtualhost> Linia zezwalaj▒ca na u┐ycie metody PUT przez skrypt put.php wygl▒da nastΩpuj▒co: Script PUT /put.php

    Od tej chwili wszelkie ┐▒dania z metod▒ PUT skierowane do <Directory> czy <Virtualhost> bΩd▒ trafia│y do skryptu put.php. Oczywi╢cie dla tego katalogu/virtualhosta musi byµ aktywny PHP obs│uguj▒cy skrypty z rozszerzeniem .php.

    Wewn▒trz skryptu put.php powiniene╢ umie╢ciµ:

    <? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); 
    ?>
        

    Plik zostanie skopiowany do lokalizacji ┐▒danej przez zdalnego klienta. Prawdopodobnie chcia│by╢ dokonaµ sprawdzenia autentyczno╢ci u┐ytkownika zanim wykonasz to kopiowanie. Zwr≤µ uwagΩ, ┐e kiedy PHP otrzyma ┐▒danie z metod▒ PUT, zapisuje otrzymany plik w pliku tymczasowym. Kiedy ┐▒danie jest zako±czone, plik tymczasowy jest kasowany. Skrypt PHP dla metody PUT mo┐e skopiowaµ plik w dowolne miejsce. Nazwa pliku tymczasowego przechowywana jest przez zmienn▒ $PHP_PUT_FILENAME, za╢ sugerowana nazwa tego pliku przez $REQUEST_URI. Nazwa jest taka jak okre╢li│ zdalny klient. Oczywi╢cie mo┐esz j▒ zmieniµ, np. kopiowaµ wszystkie przychodz▒ce pliki do specjalnego katalogu "upload".

    wstecz spis tresci dalej

    kontakt

    autor:

    Hubert Mierzwiak

    wsp≤│praca:

    Piotr Karolak

    Chcesz prowadziµ sw≤j dzia│ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s▒dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz sw≤j email i wci╢nij Enter

    linuxnews.pl
  • KRRiTV stra┐nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju┐ nowy Debian...
  • Tydzie± min▒│...




  • Manual | Skrypty | Artyku│y | Projekty
    Porady | Zasoby | Linki
    G│≤wna | Forum

    Copyright 2000 Hubert Mierzwiak