Fájlok php, direqtor

Sok felhasznált források fájlok tárolására. Amellett, hogy a teherbíró képesség és fájlok tárolásához, meg kell szervezni a saját letölthető. Ez az egyik dolog, ha a fájlok a nyilvánosság előtt, de akkor szükség lehet átvinni egy fájlt keresztül PHP. Például az erőforrás-menedzser lehet információt keres a letöltések száma. Nagy fájlok továbbra is szükség van, hogy képes legyen folytatni, és talán a legnehezebb pillanat a kiszolgáló-oldali script. Lássuk, hogyan kell megszervezni a script PHP, ami lehetővé teszi, hogy végre minden a fenti funkciókat.

Kezdjük egy egyszerű módszerrel. Hagyja, hogy a szkript megkapja a fájl nevét bármely, a lekérdezési paramétereket. Ez lehet igazán gépelt URL-t és átírható szerver segítségével mod_rewrite. Script felhívja file_download () függvény egy paramétert $ filename. Amellett, hogy a közvetlen átviteli kérelem $ filename is számítható alapján a forrás azonosítója a kérés vagy kiegészítve a szerver mappát a fa.

A legegyszerűbb módja annak, hogy kezelje a kéréseket a letöltéshez - egyszerű átirányítani őket.

funkció file_download # 40; $ filename # 41; # 123;
// Ellenőrizze, hogy létezik a fájl
ha # 40; file_exists # 40; $ filename # 41; # 41; # 123;
// Itt írjuk be a kódot, amely kezeli az egyes fájlok letöltése.

// ügyfél irányítva egy fájlt.
header # 40; 'Location:'. $ filename # 41; ;
# 125; más # 123;
// Ha a fájl nem található, tájékoztatja az ügyfelet arról, hogy a HTTP fejlécek
header # 40; $ _SERVER # 91; "SERVER_PROTOCOL" # 93;. '404 Not Found' # 41; ;
header # 40; 'Állapot: 404 Not Found' # 41; ;
# 125;
// megszakítása tovább a szkript, hogy nem küld kéretlen a választ az ügyféloldali
exit;
# 125;

Ehhez szükség lenne bonyolítja a feltöltéseket.

funkció file_download # 40; $ Filename. $ MIME-típus = 'application / octet-stream' # 41; # 123;
ha # 40; file_exists # 40; $ filename # 41; # 41; # 123;
// elküldése szükséges fejlécek
header # 40; $ _SERVER # 91; "SERVER_PROTOCOL" # 93;. '200 OK' # 41; ;
// tartalom típusát. Meg lehet venni a fejléc az ügyféltől kapott
// ha egy fájl letöltése a szerverről. Ez lehet előállítani expanzió PHP Fileinfo.
header # 40; 'Content-Type:'. $ A MIME-típus # 41; ;
// Utolsó módosítás dátuma
header # 40; 'Last-Modified:'. gmdate # 40; 'R'. filemtime # 40; $ filename # 41; # 41; # 41; ;
// küldése az egyedi azonosító okmány,
// amelynek értéke megváltozik, amikor megváltozik.
// A következő kódot, a számítás ezt a címet készül ugyanúgy
// a szoftver Apache szerver
header # 40; 'ETag:'. sprintf # 40; '% X% x-% x'. fileinode # 40; $ filename # 41;. filesize # 40; $ filename # 41;. filemtime # 40; $ filename # 41; # 41; # 41; ;
// File Size
header # 40; 'Content-Length:'. # 40; filesize # 40; $ filename # 41; # 41; # 41; ;
header # 40; 'Connection: close' # 41; ;
// fájlnevet ez tárolja a böngésző, vagy töltse le a programot.
// E nélkül fejléc fogják használni az alap PHP script nevét.
// De ez a cím nem szükséges, ha használja a mod_rewrite
// kérések átirányítására a szerver egy PHP script
header # 40; „Content-Disposition: attachment; filename = "”. basename # 40; $ filename # 41;. ''; ' # 41; ;
// A tartalmát a fájl
echo file_get_contents # 40; $ filename # 41; ;
# 125; más # 123;
header # 40; $ _SERVER # 91; "SERVER_PROTOCOL" # 93;. '404 Not Found' # 41; ;
header # 40; 'Állapot: 404 Not Found' # 41; ;
# 125;
exit;
# 125;

funkció file_download # 40; $ Filename. $ MIME-típus = 'application / octet-stream' # 41; # 123;
ha # 40; file_exists # 40; $ filename # 41; # 41; # 123;
header # 40; $ _SERVER # 91; "SERVER_PROTOCOL" # 93;. '200 OK' # 41; ;
header # 40; 'Content-Type:'. $ A MIME-típus # 41; ;
header # 40; 'Last-Modified:'. gmdate # 40; 'R'. filemtime # 40; $ filename # 41; # 41; # 41; ;
header # 40; 'ETag:'. sprintf # 40; '% X% x-% x'. fileinode # 40; $ filename # 41;. filesize # 40; $ filename # 41;. filemtime # 40; $ filename # 41; # 41; # 41; ;
header # 40; 'Content-Length:'. # 40; filesize # 40; $ filename # 41; # 41; # 41; ;
header # 40; 'Connection: close' # 41; ;
header # 40; „Content-Disposition: attachment; filename = "”. basename # 40; $ filename # 41;. ''; ' # 41; ;
// Nyissa meg a kívánt fájlt
$ F = fopen # 40; $ Filename. 'R' # 41; ;
míg # 40;. feof # 40; $ f # 41; # 41; # 123;
// Read Kbyte blokk, akkor adja meg a kimeneti és reset a vágólapra
echo fread # 40; $ F. 1024 # 41; ;
flush # 40; # 41; ;
# 125;
// Zárja be a fájlt
fclose # 40; $ f # 41; ;
# 125; más # 123;
header # 40; $ _SERVER # 91; "SERVER_PROTOCOL" # 93;. '404 Not Found' # 41; ;
header # 40; 'Állapot: 404 Not Found' # 41; ;
# 125;
exit;
# 125;

Én még mindig az a gondolat róla. Lehet futtatni egy PHP szkript időtúllépés több kitenni.
Tedd magad, amíg ez a hiba nem a szó. bár megpróbáltam.

Timeout script? mmm. mivel meg kell kötni az időtúllépés IP-re. uh. de bizonyos fájlokat 1 Mb 200 és a sebesség, mind különböző. Valaki vydelenka, és valaki a telefonos. Fogalmam sincs, hogyan kell kiszámítani ezeket a feltételeket időtúllépés.
Megértem, hogy ez nem hiba, és a normális működését a forgatókönyvet. Átirányításkor header'om script leáll (látszólag logikus), természetesen okozza ezt kikapcsolással, ami eltávolítja a címkét a szál, hogy valóban létezik. = (
Admin servaka nyugszik, és nem akar vágni különösen makacs felhasználók, sem pedig az Apache szinten sem megelőzően (például iptables). Általánosságban elmondható, hogy jön valami köze ennek a programból. Minden már megtörtént. htaccess és ravasz írt átirányításokat és a cookie ellenőrzéseket, és átirányítja a forgatókönyvet folyik. Az egyetlen dolog, dugulás - idő előtt eltávolított címkék folyik. = (

I figyelmetlen. ) Ne azonnal észre, hogy az átirányítás lezárja a kapcsolatot. Aztán nem értem, hogy kihasználják ezt a helyzetet. Átirányításkor fájlokat közvetlenül, és korlátozzák a folyamok száma csak akkor lehetséges Apache. A httpd.conf vagy .htaccess fájlt ezt a lehetőséget. A PHP fájlt jelent csak fizet a forgatókönyvet. Aztán ott van a garancia arra, hogy a szkript futtatása közben ott injekciót.

Még egy dolog.
Talán próbálja meg egy fejlécet Connection: Keep-alive
Nem volt ideje kipróbálni, hogy a fájl szerver csak a hétvégén kapnánk, de megtalálhatók itt szorít a cipő. Még mindig kell ásni az RFC.

Jellemzői a következők: az injekció határértéket anonim, kimeneti fájl több patakok, a folytatása és részleges letöltések számának korlátozása az ilyen patakok.

Van egy csomó finom pontok: az ellenőrzési tevékenység a vegyület, kezelés és támogatás részleges GET-kéréseket.
Az eredmények szerint az leszek írás megjegyzi. Általában egy hét vagy két vagy három.

=)) Is úgy döntött, hogy írjon egy programot ki. De bystrenkomu, a térd. )) Szeretem valamit az emberek számára a fájlt vissza.

>> A httpd.conf vagy .htaccess fájlt ezt a lehetőséget.
Tehát ez csak azt, hogy nincs htaccess. Csak az Apache és a TCP / IP, de admin nedaetstso.
Azt javasolja, hogy módosítsa a VDS a dedikált szerver. Nem értem, vagy ravasz lusta))

Jó napot!
Köszönjük a hasznos cikk!
Kérem, segítsen nekem a következő probléma.

Én használ egy űrlap át úgy paraméterek, a másik oldalon download.php
Amely meghatározza az utolsó pont ezt a cikket, a lefolyás után
file_download ($ filename);

Kérem, mondja meg, miért van letöltés helyett a fájlt, nyissa meg a böngésző kódot.

Nézze meg, hogy melyik lesz a főcím közben a böngésző. Meghatározott funkciót letöltése fájlfejlécekbe továbbítani kell. Ha ők nem telt el - ásni a szerver oldalon

Kapcsolódó cikkek