Gå til innhold

Hvordan passordbeskytte nedlasting av filer?


Anbefalte innlegg

Ønsker at kun utvalgte personer skal ha tilgang til en fil, og må oppgi en kode for å kunne laste den ned.  Å legge linkene på en side som krever innlogging har liten effekt, siden selve filen jo blir tilgjengelig for alle bare de har full URL. Det naturlige ville jo være å bruke vanlig HTTP authentication via htaccess, men det kan ikke brukes i dette tilfellet.

 

Er måten å gjøre dette på å lage et PHP-script som gjør sjekk om bruker har tilgang, og dersom brukeren har tilgang, leser scriptet selv inn filen, og deretter "printer" ut filen med riktig MIME? I så fall, vil ikke dette bli et problem på store filer?

 

Noen som har gjort dette før? Vil helst ikke bruke noen voldsomt avanserte nedlastings-systemer.

Endret av Lurifaksen
Lenke til kommentar
Videoannonse
Annonse

Har ikke noe script her og nå, men greia er at man må lese og spytte ut fila, ikke kjøre en «redirect» på det. Blir forsåvidt samme greia som å spytte ut en fil fra databasen, bare at at kilden er disk (fil utenfor tilgjengelig område via web) i stedet for databasen.

Lenke til kommentar
Har ikke noe script her og nå, men greia er at man må lese og spytte ut fila, ikke kjøre en «redirect» på det. Blir forsåvidt samme greia som å spytte ut en fil fra databasen, bare at at kilden er disk (fil utenfor tilgjengelig område via web) i stedet for databasen.

 

Men blir ikke dette et problem hvis f.eks filen er på 1GB? Da må vel PHP lese inn hele filen i minne før den kan spytte den ut. Vanlige webhoster pleier vel bare å la PHP bruke rundt 16MB minne eller noe slikt?

Lenke til kommentar
Neida, bare lese inn x bytes om gangen og skriv de ut før man leser inn x nye bytes og skriver de ut osv.

 

Hmm... høres ganske resurskrevendes ut likevel. Er dette eneste måten hvis en ikke bruker http authentication?

Hvordan skal dette være ressurskrevende? Det man gjør er jo i praksis å flytte en operasjon fra webserveren og over i et PHP-script. Eneste forskjellen er at webserveren nok cacher mye brukte filer internt og ikke minst at man innfører et ledd til, men det kan du ikke unngå hvis innloggingen foregår i PHP. Utover det er prosessen helt lik. Man henter inn en viss størrelse av filen, sender den, leser inn ny bit, sender den osv. uavhengig av språk. Det er rett og slett akkurat samme metode webserveren vil bruke. Det er såklart mulig du kommer til å fylle opp bufferet i webserveren med dette, men i såfall står bare PHP-scriptet på vent og bufferet vil jo være pr. tilkobling. Bare så det er sagt, PHP klarer helt fint å spytte ut nok data til å fylle opp en 100Mbit LAN-kobling (testet ikke med 1Gbit), så her blir begrensningen helt klart disk og tildels buffere, akkurat som hvis webserveren skulle send den samme fila selv.

 

Bare for å ha svart på spørsmålet: Ja, det er nok eneste mulighet, iallfall hvis du skal gjøre det i PHP.

Endret av Ernie
Lenke til kommentar
Neida, bare lese inn x bytes om gangen og skriv de ut før man leser inn x nye bytes og skriver de ut osv.

 

Hmm... høres ganske resurskrevendes ut likevel. Er dette eneste måten hvis en ikke bruker http authentication?

Hvordan skal dette være ressurskrevende? Det man gjør er jo i praksis å flytte en operasjon fra webserveren og over i et PHP-script. Eneste forskjellen er at webserveren nok cacher mye brukte filer internt og ikke minst at man innfører et ledd til, men det kan du ikke unngå hvis innloggingen foregår i PHP. Utover det er prosessen helt lik. Man henter inn en viss størrelse av filen, sender den, leser inn ny bit, sender den osv. uavhengig av språk. Det er rett og slett akkurat samme metode webserveren vil bruke. Det er såklart mulig du kommer til å fylle opp bufferet i webserveren med dette, men i såfall står bare PHP-scriptet på vent og bufferet vil jo være pr. tilkobling. Bare så det er sagt, PHP klarer helt fint å spytte ut nok data til å fylle opp en 100Mbit LAN-kobling (testet ikke med 1Gbit), så her blir begrensningen helt klart disk og tildels buffere, akkurat som hvis webserveren skulle send den samme fila selv.

 

Bare for å ha svart på spørsmålet: Ja, det er nok eneste mulighet, iallfall hvis du skal gjøre det i PHP.

 

 

Ernie, du burde virkelig melde deg på kvitt eller dobbelt . PHP :p

Lenke til kommentar
Ok, tusen takk for svar :)

 

En ulempe er vel at det på denne måten ikke er mulig å fortsette en avbrutt nedlasting.

Nope, det er nok mulig. Jeg mener å ha sett en kommentar i PHP-manualen ang. det hvor det ble postet kode som angivelig skulle støtte «multiple connections», i praksis støtte for å gjennoppta avbrutte nedlastinger. Eneste er at jeg ikke husker hvor. Uannsett, $_SERVER['HTTP_RANGE'] er stikkordet. Problemet er at den må parses. Dokumentasjon

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...