Töltsön fel fájlokat, és minden vele kapcsolatos

Rövid kirándulás feltölteni

Még ha rendelkezésre áll egy számítógépre, amely egyesítené a kiszolgáló és a munkaállomás nem szabad elfelejteni, hogy a php használ a kliens / szerver technológia. A fájl, amit szeretnénk letölteni, általában található a kliens gépen, azaz felhasználó egy közönséges látogató az oldalon. Cél - szerver. Annak érdekében, hogy a fájlátvitel folyamat, mi szükség van a következő formában:







Az akció területen kell URL-jét php-script, ami továbbra is részt vesz a feldolgozás feltöltött fájlokat. MAX_FILE_SIZE rejtett mező meg kell előznie a fájl kiválasztó mező, és tartsa meg a maximális fájlméretet byte-ban. A cél -, hogy ellenőrizze a fájl méretét, még mielőtt a fájlt a szerverre. Ez enyhíti a felhasználó egy hosszú és eredménytelen fájlfeltöltés a szerver és a kialakulását túl nagy forgalom, de nem különösen támaszkodnak ezt a korlátozást, mert könnyen bejárható.

Mi történik, ha a felhasználó kiválaszt egy fájlt a lemezre, majd kattintson a gombra „Send file”? A böngésző elküldi a fájlt a szerverre, ahol php-tolmács mondja egy ideiglenes könyvtárba, hogy hozzárendeli egy véletlenszerű nevet és végrehajtja a szkript meghatározott cselekvési területen.

Hogyan kell keresni upload.php?

Amikor a forgatókönyvet, a kérdés természetesen felmerül: hogyan lehet az információt a letöltött fájlt, és el kell jutnia a fájlt. Ha a PHP 4.1.0 és régebbi, akkor a legjobb, ha a globális tömböt $ _FILES. Minden letöltött fájl egy hash tömb a következő információkat:

  • $ _FILES [ 'userfile'] [ 'name'] - az eredeti fájl nevét, mint ahogy látható a felhasználó kiválaszt egy fájlt;
  • $ _FILES [ 'userfile'] [ 'type'] - mime / fájltípust, például lehet image / gif; Ez a mező hasznos megőrizni, ha azt szeretné, hogy egy felületet, hogy letöltötte a letöltött fájlokat;
  • $ _FILES [ 'userfile'] [ 'size'] - a méret a letöltött fájl;
  • $ _FILES [ 'userfile'] [ 'tmp_name'] - a teljes elérési utat egy ideiglenes fájlt a lemezen;
  • $ _FILES [ 'userfile'] [ 'error'] - es verzió óta 4.2.0 tartalmazza a hibakódot, értéke 0, ha a művelet sikeres volt.

Ha a szerver beállításokat register_globals = on, majd hozzon létre további változókat az űrlap $ userfile_name, $ userfile_type, $ userfile_size ... Tekintve, hogy a verzió 4.2.0, az alapértelmezett beállítás register_globals = off használatával ezeket a változókat nem ajánlott, még akkor is, ha azok azonosítani. A legjobb módja annak, hogy információt adjon a letölthető fájlok - használja egy sor $ _FILES.

Együttműködik a letöltött fájlokat a legjobb, ha a beépített funkciók és a move_uploaded_file is_uploaded_file, aki ellenőrzi, hogy a fájl már letöltött, és tedd a megadott mappába, ill. További részletes információ megtalálható a kézikönyv oldalakat. Nem szükséges újra feltalálni a kereket, és dolgozni, hogy az ideiglenes fájlokat másolja őket, törölje őket. Ez megtörtént, hogy Ön és az Ön számára.

A szerver beállítása

Mindent jól csináltam, de van valami nem működik. Talán nincs beállítva a szerveren?

Ha „mindent jól”, de a kód nem működik, vagy nem működik megfelelően, nem rohan a kétségbeesés. Lehet, hogy a probléma nem a te kezedben van, de rossz a szerver beállításait. Itt van egy lista a irányelveket kell tennie a fájlok letöltését:

  • Ha szeretné tudni, hogy hol van az a php.ini kövesse
  • file_uploads - a lehetőséget, hogy megakadályozzák, vagy lehetővé teszik a fájlok letöltését általában. Alap: ON.
  • upload_max_filesize - a maximális fájlméretet, hogy le lehet tölteni. Ha meg kell dolgozni a nagy fájlok, változtassa meg ezt a beállítást. Default 2M. Ne felejtsük el, hogy változtatni post_max_size.
  • post_max_size - általános felső határa elküldött adatmennyiség egy POST kérés. Ha meg kell dolgozni a nagy fájlok, vagy küldjön egyszerre több fájlt, módosítsa ezt a beállítást. Az alapértelmezett érték 8M.
  • upload_tmp_dir - ideiglenes könyvtárat a szerveren, amely kerül minden letöltött fájlokat. Ellenőrizzük, mit tesz a jobb (ha ebben a fázisban nem sikerül, lásd a magyarázat végén a cikk). Ez könyvtárnak léteznie kell és a felhasználó számára, amely alatt az Apache, szintén jogot, hogy írjon a könyvtárba. Ha dolgozni open_basedir korlátozás bekapcsolva - az ideiglenes könyvtárban kell lennie benne. Nem kell aggódnia, tisztítás, vagy a egyediségét nevek, PHP megoldja ezt a problémát az Ön számára.






A httpd.conf fájlt:

  • Először is, győződjön meg róla, hogy a webszerver az Apache 1.3 (a legújabb verzió, mint az írás - 1.3.27). Ha az Apache 2.0, akkor olvassa el a következő részlet a dokumentáció:

Ne használja Apache 2.0 és a PHP a termelési környezetben sem Unix sem a Windows.

Kis magyarázat ezt a receptet: ebben a konkrét probléma, amikor feltölti a fájlokat a szerver nem kicsomagolt, és képek nem jelennek meg, lehet, hogy annak a ténynek köszönhető, hogy használja az orosz Apache webszerver. CharsetDisable irányelv tiltsa le a karakterkészlet-feldolgozó modul egység, azaz a nincs konverzió letöltésekor ebben a mappában nem fordul elő. CharsetRecodeMultipartForms irányelv tiltja az adatok átkódolás által küldött POST módszerrel egy fejlécet Content-Type: multipart / form-data. Ie bináris adat átvitelre ezt a beállítást, akkor hagyható, és a többi az oldal tartalmának lesz alakítva az aktuális beállításait.

De ugyanakkor szövődmények léphetnek fel: Legyen felkészülve arra, hogy bizonyos esetekben meg kell kérni a szöveget az újra kódolás saját. Ez az, amit mondanak róla a dokumentációban:

Használja az irányelv CharsetRecodeMultipartForms, ami megjelent PL23, de minden még kézzel kell kódolni a szöveg a lekérdezés. Használhatja orosz Apache API, a rendelkezésre álló más modulokat vagy orosz Apache Perl API-ről mod_perl.

Ne felejtsük el, hogy miután a konfigurációs változás, akkor újra kell indítani a web szerver.

további jellemzők

Azt szeretnénk, hogy egy ilyen dolog, de nem tudok csinálni.

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

Tény, hogy ebben nincs nehéz. Ez úgy érhető el alkalmazásával, például, hogy ez a forma:

És ne felejtsük el, hogy növelje a post_max_size, ha azt tervezi, egy csomó kép

Automatikusan letölti a fájlokat a szerveren

Fájlok tárolása MySQL adatbázisban

Ha megy, hogy tárolja letölthető fájlokat az adatbázisban, meg kell szem előtt tartani a következő pontokat:

  • Ki kell használni a területen típusú BLOB
  • Mielőtt helyezték az adatbázisba, ne felejtsük el, hogy alkalmazza a vonal mysql_escape_string
  • Ha egy fájl kell megadni header content / típus

Ne feledje, hogy megjeleníti a HTML script semmi köze a forgatókönyvet, amely a kép megjelenítéséhez. Meg kell két különböző alkalmazásokhoz.

Képek tárolása az adatbázisban nem jó stílusban. Ez sokkal kényelmesebb, hogy az adatbázisban tárolt csak az elérési utat a képfájlt.

Előállítása kép tulajdonságait.

Ha volt egy feladat elé, hogy ellenőrizze a típusát vagy a kép méretét, mielőtt feltölti a fájlt a szerverre, akkor szükség van egy funkció getimagesize. Érvként tart a fájl nevét a lemezen, és egy tömböt ad vissza, az első két eleme, amely - a szélesség és a magasság, illetve és a harmadik - a kép típusától. Ha nem tudja elolvasni a megfelelő képet a megadott fájlt, akkor a függvény hamis.

Fájlok feltöltése a neve az orosz nyelvű

Ha a fájlok letöltését a szerveren, meg kell, hogy ellenőrizze az eredeti nevükre jelenlétére „nem szabványos” karakter (például magyar ékezetes). Ha a jelenléte szükséges cserélni. Az eredeti fájl nevét megtalálható a változó $ _FILES [ „userfile”] [ „name”]. Egy ötlet, hogyan kell átalakítani a karakterláncot egy orosz nyelvű átírási megtalálható a fájlokat szinte minden fórumon szentelt php.

Display letöltési állapot vagy az állapot sávban

Legyen tudatában annak, hogy a teljes fájl letöltése, PHP nem tudja kezelni bármilyen fájl méretét vagy terhelési százalék. Csak akkor, ha a fájl már a PHP szerver, akkor képes elérni az adatokat. Ha még mindig kell ismernünk ezt a lehetőséget, a Java-applet.

A rövid vázlata a fájlokat jogairól szóló

Problémák a jogosultságokat a szerver (upload_tmp_dir)

A * nix-szerű operációs rendszer, minden mappa a fájlok, linkek tegye megfelelő hozzáférési jogokat. Úgy tűnhet, mintha rwx-rw-r-, vagy a szám 754.

Fájl vagy könyvtár elérhetősége függ a felhasználói azonosítót és csoport azonosítóját, amelyhez tartozik. Általában azt írják le három szekvencia három betűből egyes:

Itt a tulajdonos, a csoport tagjai és az összes többi felhasználó jogait a fájl olvasása, írj, és végrehajtani. Rights - érdemi kombinációja a következő betűk:

Annak érdekében, hogy feltölteni a fájlokat a szerver megfelelően működjön, meg kell végrehajtani a két lehetőség

Egy példa végrehajtásának indító képek a szerveren.