Szerver és fájlrendszer
Háttér anyag főbb programozási nyelvek és elrendezését oldalakon.
Ready technika létrehozására egyszerű és összetett dinamikus weboldalak PHP és a MySQL.
fejlesztése weboldalak a „kulcs”.
Fejlődés az egyes töredékek oldalak, tanácsot az elrendezés a weboldalak és web programozás.
Web eszköz
webáruház
webes szolgáltatások
Web Graphics
Web Resources

Azt szeretnénk, hogy lépést tartsanak a fejlődés zajlik a helyszínen? Jelentkezzen be, hogy a legfrissebb hírek és cikkek.
Nézd a Google
A fájlrendszer és a szerver. Fájlok letöltése. PHP-script dolgozni fájlokat

Képzeljünk el egy olyan helyzetet, ahol az ügyfél kell, hogy képes megváltoztatni a tartalmát a weboldal - például a legfrissebb híreket a cég. Az egyik módja ennek az, hogy a kliens le a szöveges fájl. Ezután ezeket a fájlokat az interneten lesz elérhető maszkon keresztül fejlesztett PHP.
Ehhez mi kell érteni, hogy a fájl feltölteni a szerverre.
fájlok feltöltése
A PHP elérhető egy nagyon hasznos funkció - támogatja fájlok letöltését HTTP-n keresztül protokoll. Ahelyett fájlok fogadására a HTTP-n keresztül protokoll a szerver a böngészőnek, küldünk neki az ellenkező irányba, vagyis a böngésző a szervernek. Ez általában érvényes HTML-formában. Forma, amely azt fogja használni, ahogy.
Amint az ábrán látható, az űrlap tartalmaz egy beviteli mező, ahol a felhasználó adja meg a fájl nevét, vagy kattintson a „Tallózás” gombot fájlok érhetők el a helyi gépen. Talán még nem látott formában kell feltölteni a fájlokat. Az alábbiakban bemutatjuk, hogyan valósítható meg.
Megadása után a fájl nevét, a felhasználó rákattint a „Send file”, és a fájl feltöltve a kiszolgálóra, ahol megvárja a PHP-script.
Végrehajtásához fájlfeltöltés alkalmaz valamilyen HTML szerkezetek kifejezetten erre a célra.
upload.html - HTML formátumú fájlok letöltéséhez
fájl feltöltése
for m>
Venni ezt a különleges formáját.
- A leíró
- Az űrlap tartalmaznia kell egy olyan területen, amely megadja a maximális feltölthető fájlok méretének. Ez a rejtett mező, és ez képviseli a HTML-tag:
Név beviteli mező, akkor bármelyik, már csak azt kell megjegyezni, mert a nevet fogja használni a fogadó PHP-script elérni a fájlt.
Mielőtt tovább, érdemes emlékeztetni arra, hogy az egyes verziók PHP biztonsági réseket jelen a kód letöltés. Ha úgy dönt, hogy használja a letöltést a termelési kiszolgálóval, akkor meg kell, hogy megbizonyosodjon arról, hogy telepítve van a legújabb verzióját a PHP, és kövesse a kibocsátás változathoz és frissítéseket.
Ez nem lehet ok arra, hogy megtagadják olyan hasznos technológia, de ha írásban kódot kell, hogy legyen óvatos, és próbálja korlátozni a hozzáférést az összes, de a rendszergazda a helyét és tartalmát a vezetők.
A szkript a fájlok
fájlfeltöltés PHP-kód nagyon egyszerű, de ez attól függ, hogy a PHP verzió és konfigurációs beállításokat. Funkció nevek és a változók változnak verziójukban, attól függően, hogy a lenyugvó register_globals be van kapcsolva. A kódot nem igényel register_globals, de ehhez impolzovaniya PHP verzióban nem kisebb, mint 4,1.
A letöltött fájl kerül egy helyet fenntartani egy webszerver az ideiglenes fájlokat. Alapértelmezésben ez a fő ideiglenes webszerver könyvtárba. Ha a fájl nem lesz átnevezve, és nem mozdul, amíg a végén a forgatókönyvet, azt meg kell semmisíteni.
Az adatok feldolgozása a PHP-scriptek vannak tárolva a szuperglobális $ _FILES. Ha register_globals be van kapcsolva, az adatok lehetséges és azonnali hozzáférést változó nevét. De itt, talán ez az a hely, ahol jobb letiltani register_globals és adatokkal dolgoznak a szuperglobális tömb.
Elemeket a $ _FILES tömb lesz elmentve a névtáblát
- A tárolt érték $ _FILES [ „userfile”] [ „tmp_name”], az a hely, tárolására a fájlt a webszerver.
- A tárolt érték $ _FILES [ „userfile”] [ „name”], az imnem fájlt a felhasználó rendszerét.
- A tárolt érték $ _FILES [ 'userfile'] [ 'size'], jelzi, hogy a fájl mérete bájtban.
- A tárolt érték $ _FILES [ 'userfile'] [ 'type'] fájlt tartalmaz MIME-típus, például text / plain vagy image / gif.
- A tárolt érték $ _FILES [ „userfile”] [ „error”], tartalmazni fog egy hibakód történt a fájl letöltése.
Most, hogy tudja, hol található a fájl, és mi a neve, akkor másold be egy hasznos helyet. Egy ideiglenes fájl végén a szkript eltávolításra kerül. Tehát, ha szeretné menteni a fájlt, azt kell áthelyezni vagy átnevezni.
A mi pimere feltételezhető, hogy a letöltött fájlok cikkeket, így meg kell, hogy távolítsa el őket minden lehetséges HTML-címkék és menjünk át egy megfelelő könyvtárba.
upload.php - PHP-script fogadó fájlt a HTML-űrlapok
A legtöbb forgatókönyvet az ellenőrzéseket Pieces hibákat. A fájl feltöltése jár a potenciális kockázat a biztonság megsértése, és ezt a kockázatot minimalizálni kell. Meg kell, amennyire csak lehetséges, hogy alaposan ellenőrizze a fájlt, hogy a biztonsága a kijelzőt a látogató.
Lássuk mik a fő része a script tartalmaz.
Először ellenőrizze a hibakódot vissza a $ _FILES [ 'userfile'] [ 'error']. Minden hiba kód egy speciális állandó. Lehetséges állandók és azok jelentése az alábbi:
- UPLOAD_ERROR_OK - 0, ami azt jelenti, hogy nem volt hiba.
- UPLOAD_ERR_INI_SIZE -ravna 1 azt jelenti, hogy a méret a fájl mérete meghaladja a megadott maximumot a fájlt php.ini up_load_max_filesize irányelvet.
- UPLOAD_ERR_FORM_SIZE -ravna 2 azt jelenti, hogy a méret a fájl meghaladja a maximális értéket megadott HTML formájú elem MAX_FILE_SIZE.
- UPLOAD_ERR_PARTIAL -ravna 3, ami azt jelenti, hogy csak egy része a letöltött fájlt.
- UPLOAD_ERR_NO_FILE -ravna 4, azt jelzi, hogy a fájl nincs betöltve.
Ezután ellenőrizze a MIME-típus. Ebben az esetben, úgy döntöttünk, hogy csak akkor töltse le a szöveges fájlokat, így MIME-típus a összehasonlítjuk a $ _FILES [ „userfile”] [ „type”] egy sor „text / plain”. Ez csak akkor ellenőrzi a hibákat, és nem ellenőrzi a biztonsággal kapcsolatos. MIME-típus határozza meg a felhasználó böngészőjének kiterjesztésfüggő, majd elküldi a szerver. Mivel ez könnyen át hamis MIME-típus, a támadók is jól kihasználni azt.
Ezután ellenőrizzük, hogy a fájl valóban töltve, és nem helyi fájl, mint a / etc / passwd. Valamivel később még visszatérünk erre a kérdésre.
Ha minden jól megy, akkor másolja a fájlt egy könyvtárba szánt rá. Ebben a példában a / feltöltések / -on kívül az interneten fa, és így alkalmas arra, hogy az útjába sodort fájlokat, amelyek később lehetnek benne valahol.
Aztán feldolgozni a fájlt, törölje az egészet véletlen HTML és PHP-címkék használatával strip_tags () függvény és írd újra a fájlt.
Végül a tartalmát a fájl megjelenik a felhasználó számára, hogy biztosítsák, hogy a fájl betöltése sikerült.
Az eredmény a sikeres végrehajtása a script így néz ki:
Annak ellenőrzésére, a sikeres fájl letöltése, és biztosítják, hogy nem foglalkozik a helyi fájl, mint a / etc / passwd került alkalmazásra funkció move_uploaded_file () és az is használható is_uploaded_file ().
Firkált boot szkript lehetővé teszi a látogató a rossz szándék, hogy hozzon létre egy ideiglenes fájlt egy bizonyos nevet, és a forgatókönyvet kell kezelni, mint elfoglalt. És mivel sok startup script visszaadja a felhasználó számára, hogy másolja a letöltött fájlt, vagy helyezzük a helyet, ahonnan lehet letölteni, a felhasználók képesek elérni a fájlt olvasásra elérhetővé webszerver. Ezek közül a fájlok lehetnek fájlok bizalmas információkat - például a / etc / passwd vagy PHP forráskód fájlt, amely tartalmazza a jelszót az adatbázis eléréséhez.
gyakori problémák
Amikor le fájlokat a szerverre kell vennie néhány fontos pontot.
- Az előző példában feltételez ellenőrzése felhasználói hozzáférési jogokat. Nem szabad megengedni, hogy fájlok feltöltésére senkinek.
- Ha engedélyezi a fájlok feltöltése a szerverre ellenőrzése nélkül a hozzáférési jogok vagy a felhasználók, akik nem megbízhatóak, vannak nagyon erős oka aggodalomra a tartalmát ezeket a fájlokat. Töltse le és futtassa a script, hogy káros lehet - az esemény rendkívül kívánatos. Ezért érdemes megnézni nemcsak a típusa és a fájl tartalmát, mint ebben a példában, hanem a nevét. Nagyon jó ötlet -, hogy hozzá a letöltött fájlok „biztonságos” neveket.
- Ha a gép fut Windows, akkor egészen a fájl helyett \ kell használni \\ / vagy.
- A fájl neve a felhasználó által megadott, a tárgyalt forgatókönyv tele van a megjelenése különböző problémák. A legnyilvánvalóbb ezek jár azzal a kockázattal jár véletlenül felülírja a már meglévő fájlokat az azonos nevet. A kevésbé nyilvánvaló probléma az, hogy a különböző operációs rendszerek, és még a nyelvi beállításokat használhatják különböző karakterkészletek a fájlneveket. Letöltött fájl nevét, hogy olyan karaktereket tartalmaz, amelyek nem érvényesek a rendszer.
- Ha problémája van a dob a rendszer, ellenőrizze a php.ini fájlban. Meg kell tartalmaznia upload_tmp_dir direktíva meghatározza azt a könyvtárat, amely az elérni kívánt. Ahhoz, hogy nagy fájlokat tölt le is kell beállítani a memory_limit irányelvet, amely meghatározza a maximális méretet feltöltött fájlokat. Az Apache is vannak konfigurálható timeout, és korlátozza a méret a tranzakció, amely kell figyelni problémák esetén.
- Beszéljétek