Gå til innhold

gi fil-tilgang kun til innlogga brukere?


Anbefalte innlegg

hei

jeg skal lage en nedlastingsløsning for et band.

de skal ha tre låter tilgjengelig for 500 kjøpere av plata de akkurat har gitt ut.

i den fysiske plata skal det være et brukernavn og et passord som kjøperne skal kunne bruke for å få mp3-versjoner av låtene fra vinylen.

 

lovverket sier at kjøperne kun kan laste ned hver låt tre ganger hver.

 

jeg tenkte å bruke php og mysql for å telle antall ganger hver låt hentes fra mappa og gjøres tilgjengelig for nedlasting. hvis låta er hentet tre ganger skal ikke bruker få tilgang.

 

er dette mulig?

 

og ikke minst er det mulig å beskytte mp3mappa så folk ikke kan gjette seg til stien for å få tilgang (det vil si gå utenom hele innloggingssystemet?)

 

jeg kan ikke legge mappa over www-katalogen da webhotellfolka ikke gir tilgang for slikt.

 

har noen en løsning på problemet ville både jeg og bandet blitt utrolig takknemlig.

Lenke til kommentar
Videoannonse
Annonse

 

og ikke minst er det mulig å beskytte mp3mappa så folk ikke kan gjette seg til stien for å få tilgang (det vil si gå utenom hele innloggingssystemet?)

 

 

8611197[/snapback]

det kan vel løses med en .htaccess fil, jeg er ikke sikker på hvordan den skal se ut, men det er det andre som vet :)

Lenke til kommentar
En mulighet er å lagre filene i mysql-databasen.

Da er det også enkelt å begrense hvor mange ganger hver bruker kan laste ned filene.

Her har du en enkel og grei tutorial på opplasting av filer til mysql med php:

Uploading Files To MySQL Database

8611370[/snapback]

 

Det hørtes veldig fornuftig ut, og jeg sjekka den sida du linka til. Dessverre ser det ut som om det ligger en begrensning på hvor store filer som kan lastes opp på denne måten til webhotellserveren.

 

Fikk opp ei låt på ca 2.2MB mens neste låt på ca fem ga "Fatal error: Allowed memory size ..." etc.

 

Så da går det nok ikke å laste opp låtene i god kvalitet og det må de jo være..

 

Men tusen takk for hjelpa så langt!

Lenke til kommentar
En mulighet er å lagre filene i mysql-databasen.

Da er det også enkelt å begrense hvor mange ganger hver bruker kan laste ned filene.

Her har du en enkel og grei tutorial på opplasting av filer til mysql med php:

Uploading Files To MySQL Database

8611370[/snapback]

 

Det hørtes veldig fornuftig ut, og jeg sjekka den sida du linka til. Dessverre ser det ut som om det ligger en begrensning på hvor store filer som kan lastes opp på denne måten til webhotellserveren.

 

Fikk opp ei låt på ca 2.2MB mens neste låt på ca fem ga "Fatal error: Allowed memory size ..." etc.

 

Så da går det nok ikke å laste opp låtene i god kvalitet og det må de jo være..

 

Men tusen takk for hjelpa så langt!

8611643[/snapback]

hosten din tillater ikke så store filer, eller så var det mysql som ikke gjorde det

Lenke til kommentar

Nei, hosten min tillater ikke så store filer, det er kjipt, men sånn er det.

Finnes det noen annen måte å gjøre dette på?

Altså en måte hvor jeg henter filene fra ei mappe?

Sitter og prøver med sessions + htaccess nå etter å ha snust på denne tråden her: https://www.diskusjon.no/index.php?showtopic=735116 , men får ikke til å sende headere to ganger, så browsern viser frem en million tegn istedet for fin musikk...

Endret av golovan
Lenke til kommentar
Hvordan ser scriptet for nedlasting ut?

8613062[/snapback]

Akkurat nå ser det ikke ut. Har prøvd litt forskjellig kan du si:)

Men jeg prøver nå å bruke sessions til innlogginga og på nedlastingssida kjører jeg da først:

session_start();

if($_SESSION['username']= $username){

Deretter har jeg testa med en get som jeg foreløpig legger inn selv i urlen, type: www.blabla.com/lastned/lastned.php?f=sangen.mp3

$filnavn = $_GET['f'];
Header("Content type: audio/mpeg");
echo file_get_contents($filnavn);

Dette funker (sikkert selvfølgelig) ikke fordi det gir meg flere headers og jeg får skrevet ut mp3'en som tegn (tror det er det som skjer, men her er jeg langt utpå glattisen).

 

Jeg har også ei .htaccess-fil i mappa som skal tvinge frem last-ned-låta-boks istedet for direkte avspilling. Går det an å utvide denne slik at man ikke klarer å åpne låtene direkte, men at php klarer det?

Lenke til kommentar

her er en metode jeg bruker for å ikke gi brukere direkte tilgang til filer lastet opp gjennom forumet:

 

1. beskytt mappen filene ligger i med en .htaccess-fil der du skriver

deny from all

 

2. følgende PHP-kode henter innholdet i filen og sender videre til brukeren (jeg mener dette skal gå selv om filen sprenger memory_limit, men kan ikke garantere):

PHP

<?php

 

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: public");

header("Content-Description: File Transfer");

header('Content-Type: application/zip'); // her må du endre til rett mime-type for mp3, muligens audio/mpeg

header('Content-Disposition: attachment; filename="fil1.mp3"'); // dette er filnavnet som brukeren vil få oppgitt, 

// uansett hva filen er lagret som på serveren

header("Content-Transfer-Encoding: binary");

header('Content-Length: '.filesize("files/kryptisk_filnavn"));

$fp fopen("files/kryptisk_filnavn","r"); //filnavnet på filen slik den er lagret på serveren

fpassthru($fp);

fclose($fp);

 

?>

 

kryptisk_filnavn kan være hva som helst som er godtatt i ett filnavn, og trenger ikke ha rett endelse (.mp3). for eksempel kan du bruke md5-hashen fra filen (md5_file()) som filnavn.

Endret av ventle
Lenke til kommentar

Hei, ventle!

Jeg prøvde php-koden din, får lasta ned fil1.mp3, men fila er ei tekstfil med blant annet følgende feilmeldinger (litt redigert):

 

filesize() <a href='function.filesize'>function.filesize</a>: Unable to access .... .... ....
filesize() <a href='function.filesize'>function.filesize</a>: stat failed... ....
Cannot modify header information - headers already sent by (output started at
fopen() <a href='function.fopen'>function.fopen</a>: Unable to access ... ....

 

Men dette virker veldig lovende! Har du noen flere tips?

Lenke til kommentar
'unable to access' indikerer at det er noe problem med filtillatelsene, prøv å endre hvem som har tilgang til filene (chmod)

8622442[/snapback]

 

testa med å sette rwx for alle på den ene låta, men det kommer samme feilmelding i fila fremdeles.

chmodda via ftp forøvrig.

Lenke til kommentar
hmm sikker på at filnavnet er riktig (husk at files/ bare er mappenavnet)?

8625308[/snapback]

Joda, det var en feil i filnavnet... typisk

Men nå funker det! Tusen takk!

 

Eller, det funker nesten.

Hvis jeg skriver ut ei liste med låtlinker som brukeren kan velge fra, ala <a href="?sang=sangen">, får jeg headers allready sent. Tar jeg bort echosetningene så sida blir helt tom for innhold, kan jeg selv skrive inn ?sang=sangen i URL og da funker det.

 

Litt dårlig forklart dessverre... men, hva gjør jeg feil?

[edit]

Tror jeg har problemer med sessions.

Ser på dette nå. Sier fra om det funker når/hvis jeg får ordna opp[/edit]

Endret av golovan
Lenke til kommentar

Hva med å legge alle filene ol. i en mappe som er beskyttet av htaccess 24/7..

 

Så lager du et php script som styrer tillatelsene til brukerene.

Vist noen prøver å få tilgang til en fil (trykker på linken "sang.mp3") blir de sendt til scriptet sammen med en id.

Vist iden stemmer med en rad i databasen sender scriptet filen til brukeren.

 

Alt dette skal være mulig å gjennomføre og er ofte brukt av store nedlastningstjenester.

Du trenger nødvendigvis ikke ha ID, men med alle filnavnene osv. i en database har du mye mer kontroll på hva brukerene har tilgang til og ikke.

 

EDIT: Eller er det dette du prøver på atm? :p

Endret av goggen90
Lenke til kommentar
Hva med å legge alle filene ol. i en mappe som er beskyttet av htaccess 24/7..

 

Så lager du et php script som styrer tillatelsene til brukerene.

Vist noen prøver å få tilgang til en fil (trykker på linken "sang.mp3") blir de sendt til scriptet sammen med en id.

Vist iden stemmer med en rad i databasen sender scriptet filen til brukeren.

 

Alt dette skal være mulig å gjennomføre og er ofte brukt av store nedlastningstjenester.

Du trenger nødvendigvis ikke ha ID, men med alle filnavnene osv. i en database har du mye mer kontroll på hva brukerene har tilgang til og ikke.

 

EDIT: Eller er det dette du prøver på atm? :p

8629192[/snapback]

Hei

Mange gode råd nå! Tusen takk!

ATM legger jeg scriptet over i en egen php-fil. Når man klikker på sang1.mp3 åpner lenka denne sida. hvis sang1.mp3 er valgt (?sang=sang1.mp3) får man lasta ned sang1. Ser foreløpig ut som dette funker, men må teste litt mer.

 

Når dette er på plass skal jeg legge inn mysql-kobling som teller antall ganger man har lasta ned låta. Har man gjort dette mer enn tre ganger skal man ikke få laste ned flere ganger. Vet ikke helt hvordan jeg skal gjøre dette ennå, men det må jo gå an å finne ut:)

 

Det er iallfall ideen...

 

Kommer tilbake med status når ting er mer ferdig, men nå er det pc-fri ut dagen:)

 

Igjen, takk for hjelpa så langt!

Endret av golovan
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...