Sākumlapa › Forumi › Mājas lapu izstrāde › Servera puse (php, java, ruby, perl, python) › Kā atļaut faila lejupielādi tikai konkrētiem lieotājiem.
Viss ar mājaslapas veidošanu ir skaidrs, izņemot vienu, galveno lietu, par kuru gribētos iegūt kādu detalizētāku info.
Un tā ir – kā panāk, lai apmeklētājs varētu lejupielādēt failu tikai tad, kad ir samaksājis par to, tātad tikai tad, kad mans skripts ieliek datubāzē info par samaksas apstiprinājumu? Vai ar php var panākt ka lietotājs nevar vienkārši ierakstīt linku ar faila adresi un dabūt to tāpat?
Ceru ka sapratāt 🙂
Š eit vari palasīties vairāk:
Būtība uztais failu download.php(?file=fails.rar vai file=faila-id), kurā pārbaudi pret datubāzi maksājumu. Ja maksājums ir veikts – ar readfile ielasi failu un ar headeriem uzspied lejupielādi (savādāk browseri gribēs uzreiz daudz ko atvērt pašā browserī). Tas ir vieglākais ceļš, kuru vari apaudzēt ar drošību (sesija, heši, lejupielādes laiks), bet neiieteiktu šo metodi, ja faili pārsniedz pārdesmit megabaitus.
Paņemsim scenāriju, ka fails sver 512mb, un gribēs kādi 5-6 cilvēki vienlaicīgi lejupielādēt. Pieņemu, ka stāv lapa uz nejaudīgas kastes, vai virtuālā servera ar mazu RAM. Un readfile funkcija ielasa failu RAMā, tātad 6×512 = 3GB RAM. Š eit labāk izmantot tiešos linkus, bet ne vārda tiešākajā nozīmē, kā
Mans iespējamais risinājums būtu tāds:
download.php skripts ar failu vai faila identifikatoru, kurš atkal pārbauda vai maksājums ir saņemts. Ja saņemts, tad tiek izveidots simboliskais links(var arī hard link, atkarigs no situācijas) uz konkrēto lejupielādējamo failu (ļoti ieteicams ārpus WEB direktorijas sistēmā), piemēram xa452s1ad.rar, un skripts ar headeriem redirektē uz failu. Š o visu tad arī var kontrolēt un attiecīgi pēc vajadzības dzēst simboliskos linkus. Un protams šī metode prasa diezgan specifisku WEB servera konfigurāciju, kurā aprakstītas metodes, kā servēt konkrētus failus(headeri,streami utt.).
Veidi ir daudz. Ticu, ka kāds var ieteikt labāku risinājumu.
Var izmantot temporary failus (atkal nav labi pie lieliem failiem), var arī izmantot Perl valodu, lai servētu failus (daudz advancētāks darbībās ar failiem), var CGI.
Ļoti daudz kas ir atkarīgs no lejupielāžu biežuma + failu lieluma. Katrā ziņā uz lieliem failiem – readfile nav labs risinājums.
P.S.
m_janis
Palides Creep un piwchix par pavedieniem… nedaudz skaidrāks paliku.
Un autoram: kā izpaužas tas nav tik viegli kā domāji? Iedomājies, ka tas būs panākams ar vienu rindiņu? Tev taču vajag, lai nekādā veidā saite uz tiešo failu neparādās… Beztam, ieteiktu ielikt .htaccess failu tajā mapē, kurā glabāsies lejupielādējamie faili, lai jebkurā gadījumā ar tiešo saiti tos iegūt nevarētu…
Jebkurā gadījumā, nespēju saprast vienu: kāpēc tu tik ļoti bīsties lietotājiem iedot saiti, kad viņi produktu ir nopirkuši, ja viņi to pēc lejupielādēšanas var vienkārši augšupielādēt kaut kur citur un būs ieguvuši analogu saiti?
Protams readfile ir daudzreiz vieglāk implementējams, es vienīgi saku, ka tas nebūtu pareizi pie liela lieluma failiem/ masīvām lejupielādēm, jo viss notiek caur RAMu. Bet vairumā gadījumu ar to pilnīgi pietiek.
Preses relīzes