Fájlok betöltése a kiszolgálóra a PHP használatával. Példa a fájlok letöltésére a szerverre (feltöltés) a PHP-ben Hogyan töltse le a PHP fájlt

Biztosan gyakran töltse le a különböző fájlokat a webhelyeken. Például, feltöltött avatárok a fórumon, Fotók a szociális hálózatokon, különböző videókon lévő videók, csak fájlok a fájlmegosztáson. És itt ebben a cikkben megtanulod a fájlok feltöltése a PHP-ben. Az egész PHP. A legtöbb esetben ez megvalósul.

Először is, mit kell tanulni, hogy maga Html formaamelyben a fájl helyettesíti, nem kell elég normális, itt van egy példa HTML kód Ilyen forma:





A kulcspont itt egy attribútum " gatíptet"A jelentéssel" multipart / űrlap-adatok". Nem fog működni nélküle.

"Amelyben még mindig nem töltjük le a fájlt, és egy kicsit különböző fontos pontokon fogunk átadni, amelyeket figyelembe kell venni, különben a biztonság befolyásolhatja:

Print_r ($ _ fájlok);
?>

Ennek eredményeként látni fogja a tartalmat. globális kétdimenziós tömb $ _files:

  • név. - A letöltött fájl neve.
  • típus - Mime-típusú Letölthető fájl. Ez talán a biztonság legfontosabb paramétere. És mindig a fájlok fogadásakor ellenőrizni kell Mime-típusúEllenkező esetben nincs probléma. A következő cikkben részletesebben fogunk beszélni.
  • tmp_name. - Az ideiglenes fájl fizikai útja. Ez a hely, hogy a fájlt elhelyezzük, és csak akkor hordozzuk egy másik helyre. Valójában a fájl már betöltött, és csak a kiszolgáló kívánt mappájába kell mozgatni.
  • hiba - hibakód. Ha egy 0 , Nincsenek hibák.
  • méret - A letöltött fájl mérete. Ez egy gyakran használt opció is, és azt is ellenőrizni kell korlátozza a letöltött fájlok méretét. Természetesen ez a méret azonban korlátozott, de bármilyen képért ez a méret egyértelműen túlbecsült (általában, ő 10 MB).

És mindezen paraméterek vannak jelen minden letölthető fájlhoz (mindegyik egy tömb egy kétdimenziós tömbben. $ _Files.).

Most fejezzük be fájlok letöltése a szerverre a PHP-benÉs erre egy ilyen kódot ("") írunk:

$ Uploadfile \u003d "Képek /" fájlok ["somename"] ["Név"];
MOVE_UPLOADED_FILE ($ _ fájlok ["somename"] ["tmp_name"], $ uploadfile);
?>

Vagyis először megadjuk a kiszolgálón lévő letölthető fájl elérési útját. Itt szeretnénk a fájlt a könyvtárba helyezni kép"Ugyanazzal a névvel, amely a fájl előtt volt. És a funkció mOVE_UPLOADED_FILE () A fájlt az ideiglenes tárolásról a kiválasztott könyvtár könyvtárába helyezzük.

Figyeljen azonban, nagyon fontos! Tehát használjon kódot semmilyen esetben, különben a webhelyed súlyos veszélyt jelent. Valójában, abban a pillanatban letölthető teljesen: bármilyen végrehajtható fájl, szkript, Html serpenyő És más nagyon veszélyes dolgok. Ezért nagyon óvatosan ellenőrizni kell a letölthető fájlokat a szerverre. És így foglalkozunk a következő cikkben. Mivel a téma nagyon fontos, azt tanácsolom, hogy feliratkozzon a frissítésekre, hogy ne hagyja ki ezt a cikket.

Van egy JavaScript blokkolva a böngészőben. Hagyja a JavaScriptet a webhely munkájához!

Fájlok betöltése a kiszolgálóra

Rövid exours a feltöltésben

Mi az a feltöltési fájlok, vagy miért nem működik
másolás ("C: \\ Images \\ Sample.jpg", "http://mysite.ru/uploads/sample.jpg")

Még ha csak egy számítógép áll rendelkezésre, amelyen a kiszolgáló és a munkaállomás igazodik, ne felejtsük el, hogy a PHP az ügyfél / kiszolgáló technológiát használja. A feltölteni kívánt fájl általában az ügyfél autójában található, azaz Felhasználó, rendes helyszíni látogató. A cél a szerver. A fájlátviteli folyamat elvégzéséhez a következő űrlapra van szükség:

Küldje el ezt a fájlt:

Ebben az esetben a PHP parancsfájl URL-jét kell megadni a cselekvési mezőben, amely továbbra is feldolgozza a letöltött fájlokat. A rejtett max_file_size mezőnek meg kell adnia a fájlválasztó mezőt, és tartalmaznia kell a maximális megengedett fájlméretet bájtban. A megbízás az, hogy ellenőrizze a fájlméretet, amíg a fájl elküldi a szerzőt. Meg kell mentenie a felhasználónak a fájl hosszú és sikertelen letöltését a szerverre és a felesleges forgalom kialakulására, de nem lehet különösen erre a korlátozásra, mivel könnyen megközelíthető.

Mi történik, ha a felhasználó egy fájlt választott a lemezén, és megnyomta a "Küldés Fájl" gombot? A böngésző elküldi a fájlt a kiszolgálónak, ahol a PHP tolmács az ideiglenes könyvtárba helyezi az ideiglenes könyvtárába, és véletlenszerű nevet ad, és végrehajtja a művelet mezőben megadott parancsfájlt.

Hogyan kell feltöltenie.php-t?

$ uploaddir \u003d "/ var / www / uploads /"; if (move_uploaded_file ($ _ fájlok [ "userfile"] [ "tmp_name"], $ uploaddir. $ _files [ "userfile"] [ "name"])) (nyomtatás "fájl érvényes, és sikeresen feltöltésre került.";) Más (nyomtatás "van néhány hiba!";)

A szkript írásakor természetes kérdés merül fel: hogyan lehet információt kapni a letöltött fájlról, és eléri a fájlt. Ha a PHP 4.1.0-an régebbi verzióját használja, akkor a legjobb, ha a globális $ _files tömbre utal. Minden letöltött fájl esetében tartalmaz egy hash tömböt, a következő adatokkal:

  • $ _Files ["UserFile"] ["Név"] - az eredeti fájlnév, például a felhasználó látta, kiválasztotta a fájlt;
  • $ _Files ["UserFile"] ["Type"] - MIME / típusú fájl, például kép / gif; Ez a mező hasznos lehet menteni, ha egy felületet szeretne letölteni a letöltött fájlok letöltéséhez;
  • $ _Files ["UserFile"] ["Méret"] - a letöltött fájl mérete;
  • $ _Files ["UserFile"] ["tmp_name"] - a lemez ideiglenes fájljának teljes elérési útja;
  • $ _Files ["UserFile"] ["Hiba"] - A 4.2.0-es verzióval kezdődő hibakódot tartalmaz, amely 0, ha a művelet sikeresen áthaladt.

A PHP verzió 4.1.0 alatt, ez a tömb $ http_post_files. Ne felejtsük el, hogy a $ _filesektől eltérően ez a tömb nem szuperglobál, és ha például egy függvénytől, akkor kifejezetten meg kell adni a globális $ http_post_files;

Ha a $ userfile_name, $ userfile_type, $ userfile_size, $ userfile_type, $ userfile_tye, $ userfile_size további változók, $ userfile_size, a regiszter_globals \u003d Be, ... Figyelembe véve, hogy a 4.2.0 verzió kezdődik, az alapértelmezett beállítások regisztrálása_globals \u003d Ezeknek a változóknak a használata nem ajánlott, még akkor is, ha meghatározták. A letöltött fájlokról való tájékoztatás legjobb módja a $ _files tömb használata.

A letöltött fájlok működéséhez a legjobb, ha a beépített funkciókat használja az IS_UPLOADED_FILE () és a MOVE_UPLOADED_FILE (), amely ellenőrzi, hogy a fájl betöltött-e, és a megadott mappába helyezte-e. A kézi oldalakon részletesebb információkat találhat. Nem szükséges egy kerékpár és az ideiglenes fájlokkal való munkavégzés, másolja őket, törölje. Már megtörtént veled és neked.

Szerver hangolás

Mindent megtettem, de valami nem működik nekem. Talán helytelenül konfiguráltam kiszolgálón?

Ha "mindent helyes", de a kódod nem működik, vagy helytelenül működik, ne rohanjon kétségbeesésre. Talán a probléma nem a kezedben, hanem a rossz kiszolgáló beállításaiban. Itt található a fájlok letöltéséhez kapcsolódó irányelvek listája:

A PHP.INI fájlban:

  • Ha szeretné tudni, hol található a php.ini, végre
  • file_uploads. - A fájlok egészének letiltása vagy letöltése. Alapértelmezés.
  • upload_max_filesize - A letölthető maximális fájlméret. Ha nagy fájlokkal kell dolgoznia, módosítsa ezt a beállítást. Alapértelmezés szerint 2m Ne felejtse el megváltoztatni a Post_max_Size-t.
  • post_max_size. - a postafiókban továbbított adatok tetején lévő általános határérték. Ha nagy fájlokkal kell dolgoznia, vagy több fájlt küldhet egyszerre, módosítsa ezt a beállítást. Az alapértelmezett érték 8 m.
  • upload_tmp_dir. - Ideiglenes könyvtár a kiszolgálón, amelyre minden letölthető fájl kerül elhelyezni. Ellenőrizze, hogy mely jogok vannak beállítva (ha nehézségei vannak ebben a szakaszban, lásd a cikk végén a magyarázatot). Az ilyen könyvtárnak is rendelkeznie kell egy olyan felhasználóval, amely alatt az Apache elvégezhető, a könyvtárba kell írni is. Ha az Open_Basedir Restriktion engedélyezve van - akkor az ideiglenes könyvtárnak belül kell lennie. Nem kell gondoskodnia a tisztításáról vagy az egyedi nevekről, a PHP megoldja ezt a problémát az Ön számára.

Fájlban httpd.conf.:

  • Először is, győződjön meg róla, hogy az Apache 1.3 webkiszolgálót használja (a legújabb verzió az írásban - 1.3.27). Ha az Apache 2.0-t használja, olvassa el a következő kivonatot a dokumentációból:

    Ne használjon Apache 2.0 és PHP-t egy gyártási környezetben sem a Unix, sem a Windows rendszeren.

  • Ha megkapta a "post módszer nem alloded" üzenetet, azt jelenti, hogy meg kell keresnie a következő irányelvekhez hasonló valamit, és használja az engedélyezési kulcsszavakat: A megrendelés lehetővé teszi, tagadja az összeset
  • A bináris fájlok letöltésével kapcsolatos problémák - a klasszikus kérdés: "Miért küzdenek a fájlok a feltöltésekor". Itt van a megoldás a DIMA BORODIN által javasolt döntéshez (http://php.spb.ru): olyan könyvtárban, ahol a szkript fekszik, tegye meg a .htaccess fájlt, amelyben írjuk: CharsetDisle a fájlba httpd.conf. Sorok hozzáadása: Charsetrecodemultipartforms Off

Kis magyarázatok, ehhez a recepthez: A fenti probléma akkor, ha a kiszolgálóra betöltött archívumok nem fizetnek, és a képek nem jelennek meg, akkor előfordulhat, hogy az orosz Apache webszervert használják. A karakterláncos irányelv letiltja a karakterfeldolgozó modul modulját, azaz A mappában található fájlok letöltésekor nincs átkódolása. A CharsetrecodemultipartForms irányelv kikapcsolja az adatátviteli átkódolást, amelyet a Post módszerrel továbbítottak a tartalomtípussal: Multipart / Form-Adatfejléc. Azok. Az ilyen beállítással átvitt bináris adatok eredeti formában maradnak, és a helyszíni töltés többi része az aktuális kiszolgáló beállításainak megfelelően kerül elszámolásra.

De ugyanakkor szövődmények keletkezhetnek: felkészülhetnek arra a tényre, hogy egyes esetekben a kérések szövegrészeit el kell vonni. Ez az, amit a dokumentáció erről szól:

Használja a Charsetrecodemultipartforms irányelvvel, amely PL23-ban jelent meg, de még mindig kézzel szöveges alkatrészeket kell újraírnia. Ehhez az orosz Apache API-t más modulokban vagy Orosz Apache Perl API-ban kaphatja meg a MOD_PERL-től.

A kódolási definíció egyik példája itt található: http://tony2001.phpclub.net/detect_charset/detect.phs

Az Orosz Apache legutóbbi dokumentációja hivatalos honlapján található: http://apache.lexa.ru/.

Ne felejtsük el, hogy bármely konfigurációs változás után újra kell indítania a webkiszolgálót.

Az APACH paramétereket is konfigurálhatja.htaccess:

Php_value upload_max_filesize 50m php_value post_max_size 50m

További jellemzők

Több fájl betöltése egyszerre

Példa több fájl letöltési formájára:

Küldje el ezeket a fájlokat:


És ne felejtsük el növelni post_max_size.Ha sok fájl feltételezhető

Automatikus letöltési fájlok a szerverre

Ne feledje, hogy a felhasználó lemezén található fájlok bizalmas információk, amelyekre sem a JavaScript, sem sokkal több PHP alacsony kapcsolatban áll. Addig, amíg a felhasználó nem választotta ki a fájlt a segítséggel Nem számít, milyen munkát végezhet vele, és a beszéd. És ne felejtsük el, hogy ez a mező beviteli mező az érték attribútum védett a felvétel.

A fájlok tárolása a MySQL adatbázisban

Ha összegyűjtött, hogy tárolja a letölthető fájlokat az adatbázisban, emlékeznie kell a következő pontokra:

  • Használja a Blob mezőt
  • Az adatbázisba való elhelyezés előtt ne felejtse el alkalmazni a mysql_escape_string () karakterláncot
  • A fájl megjelenítésénél meg kell adnia a tartalom / típus fejlécét

Ne feledje, hogy a parancsfájl megjeleníti a HTML-t, nem kapcsolódik a szkripthez, amelyet a képnek ki kell adnia. Ezeknek két különböző alkalmazásnak kell lenniük.

A képek tárolása az adatbázisban nem jó stílus. Sokkal kényelmesebb az adatbázisban csak képfájlok tárolására.

Kép tulajdonságainak megszerzése.

Ha van feladata, hogy ellenőrizze a kép típusát vagy méretét, mielőtt letölti a fájlt a kiszolgálóra, akkor szüksége lesz a GetImageSize () funkcióra. Argumentumként elfogadja a lemez nevét a lemezen, és visszaküldi a tömböt, amelynek első két eleme a szélesség és magasság, a harmadik pedig a kép típusa. Ha lehetetlen olvasni a megfelelő képet a megadott fájlból, a funkció hazugságot ad vissza.

Az orosz nyelvű névvel rendelkező fájlok betöltése

A kiszolgálófájlba való letöltés során meg kell vizsgálnia eredeti nevét a "nem szabványos" karakterek (például orosz betűk) jelenlétéhez. Jelenlétük esetén cserélni kell. Az eredeti fájlnév megtalálható a $ _files ["UserFile"] ["Név"] változóban. Az orosz nyelvű karakterlánc újratöltése a PHP példáiban megtalálható.

Állapotkijelzés letöltése (Progress bar)

Emlékeztetni kell arra, hogy amíg a fájl teljesen letöltött, a PHP nem tudja működtetni, vagy a fájl mérete vagy a terhelés százalékos aránya. Csak akkor, ha a fájl már a PHP-kiszolgálón van, akkor hozzáférhet az információhoz. Ha még mindig ilyen lehetőséget kell végrehajtania, használja a Java-appletet.

A fájlokhoz való jog

A kiszolgálón lévő jogokkal kapcsolatos problémák (Upload_tmp_dir)

UNIX-szerű operációs rendszerekben minden mappa, fájl, a hivatkozás megfelel az engedélyeknek. Úgy nézhetnek ki, mint az rwx-rw-r- vagy a 754 szám.

A fájl vagy könyvtár elérhetősége függ a felhasználói azonosítótól és a csoport azonosítójától, amelyben belép. Az egész módot három szekvenciával, három betűvel írják le: mindegyik:

Tulajdonos Egyéb csoport (U) (g) (o) rwx rwx rwx

Itt a tulajdonos, a csoport tagjai és az összes többi felhasználónak joga van olvasni a fájlt, írja rá és végrehajtását. Jogok - A következő betűk minden értelmes kombinációja:

r olvasni. (négy)
W jogi jog. (2)
X A végrehajtáshoz való jog (keresés a katalógusban). (egy)

  • Telepítse a felhasználói könyvtár tulajdonosát, akinek a látnivalóit az Apache végzi. Ez megtalálható a httpd.conf fájlból, vagy megtekintheti a szerver folyamatainak listáját. A címtárjogoknak 700-nak kell lenniük (RWX ------).
  • Függetlenül attól, hogy ki a katalógus tulajdonosa, 777 (RWXRWXRWX) jogait határozza meg.

    Példa a képek letöltésére a szerverre.

    $ max_image_width \u003d 380; $ max_image_height \u003d 600; $ max_image_size \u003d 64 * 1024; $ valid_types \u003d tömb ("gif", "jpg", "png", "jpeg"); if (isset ($ _ fájlok [ "userfile"])) (if (is_uploaded_file ($ _ fájlok [ "userfile"] [ "tmp_name"])) ($ filename \u003d $ _files [ "userfile"] [ "tmp_name"] ; $ Ext \u003d substr ($ _ fájlok ["UserFILE"] ["NAME"], 1 + STRPPOS ($ _ fájlok ["UserFILE"] ["Név"], ".")); Ha (FileSize ($ fájlnév) )\u003e $ max_image_size) (Echo "hiba: fájlméret\u003e 64k.";) ElseIf (! in_array ($ ext, $ valival_types)) (Echo "hiba: Érvénytelen fájl típus.";) más ($ méret \u003d getimages ($) Fájlnév); ha (($ méret) && ($ méret)< $max_image_width) && ($size < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo "File successful uploaded."; } else { echo "Error: moving fie failed."; } } else { echo "Error: invalid image properties."; } } } else { echo "Error: empty file."; } } else { echo "
    Küldje el ezt a fájlt:
    "; }
  • A cikkünkben egy példát tekintünk a PHP fájl letöltési parancsfájl létrehozására a szerverre. Az egyszerű fájl letöltési példája 2 fájlja van: forma (form.html), PHP fájl letöltési parancsfájl (uploader.php).

    Most részletesen elemezzük mindent. Először elemezze az űrlapot.html űrlapfájlot:


    Amint láthatja ezt az egyszerű HTML-kódot, itt semmi bonyolult, az egyetlen, ha az űrlap betölti a fájlokat a szerverre, akkor az attribútumnak regisztrálnia kell enctype \u003d "multipart /forma-adatok ".

    Az űrlapunk így fog kinézni:

    PéldaPHP fájl letöltési parancsfájl

    Most már kitaláljuk a PHP-fájlt, amely fájlokat tölt be a kiszolgálóra. Az alábbiakban a forráskód:

    // Ha a fájlt a $ sclit_path \u003d 'uploaded_files / "értékre helyezi; / * Adja hozzá az eredeti fájlnevet a célúton. Eredmény" Uploaded_Files / FileName.extension "* / $ sclit_path \u003d $ score_path. Basename ($ _ Fájlok ["File"] ["Név"]); ha (MOVE_UPLOADED_FILE ($ _ fájlok ["Fájl"] ["tmp_name"], $ scall_path)) (echo "a fájl". Basename ($ _ fájlok ["fájl "] [" Név "])." Feltöltésre került ";) más (echo" Hiba történt a fájl feltöltésekor, próbálkozzon újra! ";);

    Hogyan működik a PHP fájl letöltése script?

    a Uploader.php egy egyszerű PHP fájl letöltési parancsfájl, amely a fájlok letöltése egy adott webhelykönyvtárba, amelyet a $ score_path \u003d "uploaded_files /" karakterlánc határoz meg;

    Nos, önmagában az üzenetek elemi kimenetét használjuk, ha / más, világos volt, a fájlunk betöltése vagy sem.

    Hacker Hacking védelem a fájl letöltésekor

    Nemcsak a hacker hackelésének védelmét védik, hanem más nemkívánatos problémákat is felmerülnek a fájlok kiszolgálóra történő letöltésekor.

    PHP fájlhéj

    Ez az első probléma, amely a fájlok letöltéséhez kapcsolódik a szerverre. Ha a letöltési fájl PHP héjjal rendelkezik, és ez nem jelenti azt, hogy kiterjesztése PHP lesz. Lehet, hogy van egy nézet kép.jpg (.gif, .png ...). De belül úgy néz ki, mint ez:

    Néhány kézműves parancsokat is végrehajthat a kiszolgálón az URL szörfözés használatával:

    $ Curl http: //server/uploads/shell.php? Parancs \u003d any_unix_command

    Védelmi módszer:

    A védelem érdekében végrehajthatja a MIME fájlellenőrzést. Lásd a példát:

    If ($ _ fájlok [ "file"] [ "type"]! \u003d "Image / gif") (echo "Sajnálom, csak valamennyi feltöltési gif képek" exit;)

    Ez a PHP kódja ellenőrzi, hogy a letölthető GIF fájl a fájl. Helyezze be ezt a kódot a PHP fájl letöltése parancsfájl előtt. Természetesen módosíthatja a JPG-t, a PNGI egyéb fájlokat.

    Ez az igazság mondani, és ez a védelmi módszer megkerülhető, ha fejléc fejlécet küld, MIME utasításokkal. Ehhez ellenőrizni kell a rendelkezésre állást Címkék a letölthető fájlban.

    A letöltött fájl méretének korlátozása

    A nagy méretű fájlok is problémák merülhetnek fel, amelyek elfoglalják a lemezterületét. Ehhez írjon egy korlátot a letöltött fájl méretére.

    Ezt az űrlap segítségével teheti meg, erre a következő sort kell hozzáadnia a HTML űrlap keretében:

    Ez a rejtett bemeneti mező korlátozza a letölthető fájl méretét. Vagy ellenőrizheti a PHP eszközök fájlméretét.

    Írj O.a PHP fájl letöltése Script hosszú lehet, de már szétszereltük a fájlok letöltésének alapelveit a szerverre. Ezért, ha valaki több kérdése van, kérje meg őket a megjegyzésekben.

    Ma, a fájl letöltési szolgáltatás a szerver (hosting) megtalálható minden szociális hálózati oldalak, hirdetőtáblák, társkereső oldalak, stb A lényege az, hogy lehetővé tegye a látogató a webes erőforráshoz, hogy hozza nyilvánosságra a fájlokat (képek, dokumentumok) az interneten.

    A szolgáltatás nyújtásakor egy jelentős mínusz van. Az a tény, hogy lehetővé téve, hogy letölti a fájlt a kiszolgálóra, mi, ahogyan az ajtó mögött áll, amelyre állandó ellenőrzés szükséges. Mivel a látogató fájljában nem csak hasznos információ, hanem olyan víruskód is, amely később lehetővé teszi a támadók számára, hogy birtokba kerüljenek a kiszolgálónak. Tekintettel ez a mínusz, gondosan ellenőrizze a fájlokat, mielőtt letölti a kiszolgálót.

    De nem fogok megfélemlíteni, de inkább elképzelném, hogy a FIGYELMEZTETÉSI FUNKCIÓ (PHP parancsfájl) a fájlok ellenőrzésére és letöltésére a szerverre. A funkció 100% -os munka. Én magam használom a webhelyeimen. Ez a funkció a képfájlok (fényképek) formátumban történő letöltésére van írva .gif, .gif, .png. De ha szeretné, módosíthatja a PHP parancsfájl alkalmazkodását az Ön igényeinek.

    A PHP parancsfájlban két ellenőrzést hajtanak végre:

    1. mivel a hoster korlátozza a letöltött fájl méretét (az adott anyag írásakor 8 MB-os határom van a tárhelyen), majd a maximális méret ellenőrzése szükséges;
    2. a fájlkiterjesztés ellenőrzése Lehetővé teszi a felesleges fájlok levágását a letöltés előtt.

    Remélem, hogy a funkciókód megfelelően elmagyarázza, hogy foglalkozzon a letöltési fájl a szerverre. De ha bármilyen kérdése van, örömmel válaszolok a megjegyzésekben.

    Most arról, hogyan kell végrehajtani gyakorlatilag

    A PHP kód funkciót külön fájlba helyezzük: Function.php, és helyezze a kiszolgálóra a gyökérkönyvtárban.

    És hozzon létre egy HTML fájlt, amelyben fényképfüggő űrlap letöltése: index.html

    upload.php - fájlforma kezelő
    NAME \u003d "gomb" - a gomb neve, amikor rákattint, hogy a fájl letöltési funkciója elindul a szerverre

    Több fájl betöltése

    Most elemezzük az esetet, ha több fájlt kell letöltenie a kiszolgálóra.
    Ehhez szükségünk van a Function.php fájlok frissítésre.php és index.html módosítására.





    Talán ez mindössze annyit kell tennie, hogy végre kell hajtania a szolgáltatást a felhasználói fájl letöltéséhez a kiszolgálóra (hosting).

    Egy másik funkció, amely szorosan kapcsolódik a grafikus fájlok letöltéséhez (fotók) egy funkció a képek méretének megváltoztatásához:

    Multipart-formák

    • A postai szolgáltatások webes Ierfacesja, amely lehetővé teszi, hogy hozzáadjon egy alkalmazást a levélhez (csatolva), és erre először le kell töltenie a fájlt a kiszolgálóra, és csak azt követően, hogy hozzáadható a levélhez;
    • Interaktív fotóalbumok és fotóalbumok, amelyek nem létezhetnek a fájl letöltési mechanizmusa nélkül a kiszolgálóhoz;
    • Ingyenes szoftverportálok, amelyeket különböző programok fájljainak cseréjére használnak stb.

    Fájl letöltése egy szerverre Multipart-formával történik, amelyben van egy fájl betöltési mező. A kódolás paramétere több pontot / formátumot jelez:



    Ez úgy néz ki, mint egy adott multipart forma, amely úgy néz ki, mint (Megpróbálhatja megnézni a multipart-formák eredményét, néhány kis fájlt letöltve a szerverre):

    A MultiPart-formák általában használják a postátviteli módszert. Amint az előző példában látható, ez az űrlap két mezővel rendelkezik:

    • Fájlválasztási mező letölthető ;
    • A fájl nevének megadásának mezője, amelyet a kiszolgálón kell megadnia .

    Multipart formanyomtatvány feldolgozása

    Mielőtt egy multipart-formi feldolgozási parancsfájlt írna, módosítania kell a konfigurációs fájlt php.ini. A fájlok letöltése a kiszolgálóra.

    A PHP PHP.INI konfigurációs fájl három paramétert tartalmaz a fájlok letöltésével a kiszolgálóra:

    • fILE_UPLOADS \u003d ON - Lehetővé teszi a fájlok letöltését a kiszolgálónak HTTP protokollon keresztül;
    • upload_tmp_dir \u003d / tmp - Beállítja a könyvtárat, hogy ideiglenesen tárolja a letöltött fájlokat;
    • upload_max_filesize \u003d 2m - beállítja a letöltött fájlok maximális összegét.

    Ha a webszerver futtatja a Linux operációs rendszert, akkor újra kell indítania a szolgáltatást:

    a httpd újraindítása

    Hogyan működik a PHP Multipart-formák? Miután megkapta a fájlt, megmenti azt a Upload_TMP_DIR ideiglenes könyvtárba, a fájlnevet véletlenszerűen választják ki. Ezután négy változót hoz létre egy Superglobal Array $ _files-re. Ez a tömb tartalmaz információkat a letöltött fájlról.

    A letöltött fájlokhoz definiált változók a PHP verziótól és az aktuális konfigurációtól függenek. Superglobal $ _files Array elérhető a PHP 4.1.0. Abban az esetben, ha a konfigurációs irányelv regisztrálja az értéket az érték tOVÁBB.Ezenkívül megfelelő nevekkel rendelkező változóknak számítanak. A 4.2.0 verzióból kiindulva a Register_Globals opció alapértelmezett értéke ki.

    Az alábbiakban megadott $ _files tömb tartalmát az alábbiakban adjuk meg. Kérjük, vegye figyelembe, hogy feltételezzük, hogy a Fájlkiválasztási mező feltöltési fájlnevét használja, a fenti többpárti formával összhangban. Természetesen a mező neve lehet.

    • $ _Files ["Uploadfile"] ["Név"] - A fájl neve, mielőtt elküldi azt a kiszolgálónak, például a Pict.GIF;
    • $ _Files ["Uploadfile"] ["méret"] - a fogadott fájl méretét bájtokban;
    • $ _Files ["Uploadfile"] ["Typefile"] - MIME típusú fogadott fájl (ha a böngésző képes volt meghatározni), például: kép / gif, kép / png, kép / jpeg, szöveg / html;
    • (Tehát a fájl letöltési mezője) - tartalmazza a fájl nevét az ideiglenes könyvtárban, például: / tmp / phpv3b3qy;
    • $ _Files ["Uploadfile"] ["hiba"] -Hibakód, amely előfordulhat, ha a fájl betöltődik. Kulcs ["hiba"] A PHP 4.2.0-hoz adtuk hozzá. A megfelelő hibakódokkal megismerheti magát

    A parancsfájl befejezése után az ideiglenes fájl törlődik. Ez azt jelenti, hogy más helyre kell másolnunk, amíg a parancsfájl befejeződik. Ez az, hogy az algoritmus a fájl letöltési forgatókönyvének a kiszolgálóra:

    Ha megnyomja a "Küldés" gombot, a fájl már letölthető a kiszolgálóra, és a neve a $ _files ["Uploadfile"] ["Név"] változó lesz. Ebben az esetben a szkriptnek azonnal másolja a nevű fájlt $ _Files ["Uploadfile"] ["tmp_name"] Egyes katalógushoz (meg kell írnia a könyvtárba).

    A fájl másolása funkcióval történik másolás () :

    Csak a másolat () másolási () függvényt használja, és ne mozduljon, mert:

    • Az ideiglenes fájl automatikusan eltávolításra kerül;
    • Ha egy ideiglenes könyvtár egy másik médián van, akkor hibaüzenet jelenik meg.

    Tegyük fel, hogy letölteni kell a fájlt a webszerver gyökérkönyvtárában található feltöltési könyvtárba (a DocumentRoot könyvtárban).

    // csak abban az esetben, hozzon létre egy könyvtárat. Ha már létrejött,
    // Hibaüzenet Mi nem fogjuk látni, mert a @ operátor:

    @mkdir ("Feltöltések", 0777);

    // másolja a fájlt a / tmp feltöltésekor
    // A fájl neve megegyezik, mint a kiszolgálóra történő küldetés előtt:

    Másolás ($ _ fájlok ["Uploadfile"] ["tmp_name"], "Feltöltések /". Basename ($ _ fájlok ["Uploadfile"] ["Név"]);

    Linuxban minden sokkal bonyolultabb - figyelembe kell venni a feltöltési jogokhoz való hozzáférési jogokat. Valószínűleg ebben az esetben a funkció mkdir () Nem fog működni, mivel nincs jogunk írni a DocumentRoot könyvtárba (általában / var / www / html vagy / home / httpd / html). Regisztráljon gyökérrendszerként, hozzon létre egy feltöltési könyvtárat, és módosítsa tulajdonosát és hozzáférési jogát az alábbiak szerint:

    // Feltöltési katalógus létrehozása

    // Telepítse az Apache tulajdonosának és csoportjának nevét - az Apache-t is:

    Chown Apache: Apache feltöltések

    // Írja be a felbontást mindenkinek (777) + A rögzítő bit telepítése (1):

    Chmod 1777 feltöltések.

    A fájl mérete korlátozott lehet, ha akarja, akkor módosítani kell a .htaccess fájlt, és korlátozza a hozzáférést a feltöltések könyvtárban - meg vagy egyedi felhasználók, akik hozzáférhetnek a könyvtár, vagy IP-címeket.

    Most fájlokat tölthet fel a szerverre.

    A PHP parancsfájl letöltése fájlokat írunk a kiszolgálóra


    // katalógus, amelyben megkapjuk a fájlt:
    $ uploaddir \u003d "./files/";
    $ Uploadfile \u003d $ Uploaddir. Basename ($ _files ["uploadfile"] ["Név"]);

    // Másolja a fájlt az ideiglenes fájl tárolására vonatkozó könyvtárból:
    ha (másolás ($ _files ["uploadfile"] ["tmp_name"], $ Uploadfile)
    {
    visszhang. "

    A fájl sikeresen letölthető a kiszolgálóra.

    " ;
    }
    más (visszhang "

    Hiba! Nem sikerült letölteni a fájlt a szerverre!

    "
    ; kijárat; )

    // A letöltött fájlról szóló információk megjelenítése:
    visszhang. "

    A szerveren betöltött fájlról szóló információk:

    "
    ;
    visszhang. "

    A letöltött fájl eredeti neve: ". $ _Files ["Uploadfile"] ["Név"]. "

    " ;
    visszhang. "

    A letöltött fájl MIME típusa: ". $ _Files ["Uploadfile"] ["Type"]. "

    " ;
    visszhang. "

    A betöltött fájl bájtban: ". $ _Files ["méret"] ["méret"]. "

    " ;
    visszhang. "

    Ideiglenes fájlnév: ". $ _Files ["Uploadfile"] ["tmp_name"]. "

    " ;

    ?>

    A több fájl betöltése például a bemeneti címke különböző névértékeinek használatával valósítható meg.

    Azt is előírja, hogy automatikusan beszerezhető információt szerveznek számos egyszerre letölthető fájl tömbjébe. Az ilyen lehetőség megvalósításához használja a tömb azonos adatszintaxját a HTML formátumban, mint a többszöri kiválasztás és jelölőnégyzet mezők:


    Küldje el ezeket a fájlokat:






    Ebben az esetben egy olyan formában küldtek, $ _FILES [ "userfile"], $ _files [ "userfile"] [ "Name"] és $ _files [ "userfile"] [ "Size"] indítja (a ugyanúgy, mint a $ http_post_files for php 4.1.0 és korábbi verziókhoz). Ha a Register_Globals konfigurációs irányelvet az On érték határozza meg, akkor a kapcsolódó globális változók is inicializálhatók. Mindegyik változó a kapott fájlok megfelelő értékeinek számszerűen indexelt tömbje lesz.

    Tegyük fel, hogy a /Home/test/some.html és /home/test/file.bin fájlok letöltöttek. Ebben az esetben a $ _files ["userfile"] ["NAME"] változónak van egyáltalán.html értéke, és a $ _files ["UserFile"] változó ["NAME"] fájl. Hasonlóképpen, a $ _files ["userfile"] ["Méret"] változó tartalmazza a fájl méretét.

    Változók $ _files ["UserFile"] ["Név"], $ _Files ["UserFile"] ["tmp_name"], $ _Files ["userfile"] ["méret"] és $ _files ["UserFile"] ["Type"] ["Type"] is inicializálódni fog.

    Következtetés:

    Amint láthatja, nem olyan nehéz a fájlok letöltése a szerverre. Nehézbb biztosítani a szükséges biztonsági szintet, mivel a fájlok a szerverre történő betöltése a támadók a szerverhez használhatók. Hogyan nyújtsuk be a szükséges biztonsági szintet, a feltöltésekkel való munka, lásd.



    <<< Назад Tartalom Tovább \u003e\u003e\u003e
    Vannak még mindig kérdések vagy valami érthetetlen - Üdvözöljük