Kā atļaut faila lejupielādi tikai konkrētiem lieotājiem.

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.

Tiek skatīts 8 ierakstu – 1 līdz 8 (no 8 kopumā)
  • Autors
    Ieraksti
  • #156787
    guitarman
    Participant

    Sveiki, esmu tāteikt php hobijists, pašlaik veidoju lapu kur lietotāji ar paypal IPN sistēmas starpniecību varētu iegādāties manis veidotas, specifiskas fonogrammas ģitārspēles apgūšanai.

    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 🙂

    #287465
    Creep
    Participant

    Vienkāršākais variants laikam būtu veidot ko šādu…

    https://www.finalwebsites.com/forums/topic/php-file-download

    Š eit vari palasīties vairāk:

    https://php.net/manual/en/function.readfile.php

    #287466
    m_janis
    Participant

    Esi aizmirsis kur tu dzīvo. Nu pāris interesenti nopirks, bet pēc tam pats saproti, kur varēs “nopirkt” :D. Ja jau pat lielās softu/mūzikas/video firmas nespēj neko aizsargāt, tad kāds individuālists ne tik.

    #287467
    piwchix
    Participant

    Skatoties cik faili ir lieli. Ja mazi, tad var mierīgi iztikt ar Creep pieminēto readfile f-ju, tas arī noteikti būs vieglāk implementējams.

    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ā https://serveris.lv/fails.rar.

    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 arī varētu pieturēties tēmas kontekstā

    #287468
    guitarman
    Participant

    Džīzas kraist. Nav tik viegli kā domāju…

    Palides Creep un piwchix par pavedieniem… nedaudz skaidrāks paliku.

    #287469
    guitarman
    Participant

    Mani tas neuztrauc. Cilvēkiem ir tiesības dalīties savā starpā.

    #287470
    Creep
    Participant

    piwchix: ar redirektu arī var, taču viena neliela problēma: pie lejupielādes uzspiežot copy download link var iegūt tiešo linku uz failu (lai gan pārbaudījis pats neesmu, var jau būt, ka tas iedod pirms redirekta saiti). Beztam, spriežot pēc pirmā posta, šoreiz laikam nav runa par kaut kādiem lielizmēra failiem.

    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?

    #287471
    piwchix
    Participant

    Tāpēc es rakstiju ir nepieciešama specifiska servera konfigurācija, kur skripts nosūta datus reizē ar redirektu. Tie ir rūļi, kā WEB serveris apkalpo konkrētus mime type utt. Var arī uz katru konekciju servēt vienu failu, var katram downloadam veidot savādāku filename. Just imagination, kā vienmēr nav vienīgā un pareizā varianta.

    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.

Tiek skatīts 8 ierakstu – 1 līdz 8 (no 8 kopumā)
  • Jums ir jāpieslēdzas sistēmai, lai varētu komentēt šo tēmu.
Jaunākais portālā