Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 5100
Hei folkens.

Jeg holder fortsatt på å lærer meg PHP og det går sakte da jeg vil ha det grunnleggende inn først før jeg beveger meg alt for avansert.


Et lite spørsmål ang. PHP.
Vet dette kan gjøres enkelt med wordpress/woocommerce, men jeg har ikke satt meg helt inn i wordpress og får liksom ikke en nettside til å se særlig pent ut.

Scenario:
Jeg har en nettbutikk og skal leie ut tekstbøker eller videoer jeg har laget selv for en viss sum i f.eks 5 dager pr leie.

Er det vanskelig å lage en "leie" funksjon med PHP? Evt hvor mye jobb er dette?
Tenker da bare funksjonen for leie og ikke brukerinnlogging etc for det kan jeg.

Hvis dette er vanskelig å få til på rimelig tid så må jeg kanskje krype til korset og prøve wordpress igjen 😊

Takker for svar på forhånd.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Nesten umulig å si uten mer info. Å takle betaling og slikt er ikke direkte trivielt, hvis du hadde tenkt til å gjøre det automatisk. Å gjøre det på en trygg måte er, som så mye annet i PHP, heller ikke enkelt, og jeg mistenker at du kan ha undervurdert problemstillingen - selv et enkelt login system har mange potensielle feller du kan gå i. Det er også fundamentalt vanskelig å "leie ut" dokumenter. Hvordan forhindrer du folk fra å lagre dem? Sannsynligvis ikke i det hele tatt.
Hei og takk for svar.

Her tenker jeg kun vanlige mp4 filmer f.eks som skal ligge på nettsiden og ikke ha noe nedlasting.
Om noen er teknisk annlagt eller kan å bruke google for å laste ned filmene så tenker jeg ikke så mye på det egentlig.

Tenker på muligheten å orde et system for leie over en viss periode og når perioden er over så fungerer det ikke å se filmen lengre. Det blir da å se filmen via nettleseren og ikke igjennom en link som leder til noe annet.

Vet ikke helt hvordan jeg skal få forklart det på en annen måte. Det blir egentlig litt som wordpress med hss extention og woocommerce der man bruker hoststreamsell for å legge opp filmene, encode de også synce de opp mot wordpress.


Har søkt en del på google men finner bare sånne ferdige sider som ordnet alt for deg og ikke noen forklaring eller annet som kan vise hvordan dette gjøres.
For et sånn prosjekt ville jeg droppet brukerinnloggingen og heller laget en integrasjon mot paypal for betaling. Ved gjennomført betaling sendes en midlertidig lenke til sluttbruker på e-post.

Da kan du ha en database som eksempelvis ser sånn ut:

Products: Id, Name, Price, FileUrl
Orders: Id, Hash, ProductId, CustomerMail, OrderStatus, ExpiryDate

Bruk ordretabellen som en "proxy". Hvert kjøp genererer en lenke som presenterer et produkt forutsatt at datoen for ordren ikke har gått ut.

Ressurser:
Paypal Payments API

Stackoverflow har tidligere fått et lignende spørsmål om nedlastbart innhold. Bruk det som inspirasjon
Hadde tenkt å ha brukerinnlogging for at videoene er på nettsiden sånn at de blir gjenkjent og kan se filmene så ofte de vil i perioden de har.

Men hvis det er avansert å lage en php applikasjon for leie så kan det hende jeg må gå for wordpress.
Limited edition
Moff's Avatar
PHP-delen av dette er relativt enkel. Det som kompliserer dette er at du ønsker å ta betaling. Dette krever at du integrerer mot en betalingsløsning, som PayPal. Dette fungerer vanligvis slik at du registrerer deg som en bruker av betalingstjenesten, og du gir brukerne dine en link dit hvor de kan betale. Når betalingen er utført så vil betalingsløsningen redirecte brukeren tilbake til siden din, og du bør da helst ha mulighet til å verifisere at brukeren faktisk har betalt. Typisk vil du da kunne kalle noe sånt som paypal.com/har-bruker-betalt/bruker-id (fiktiv lenke), og betalingsløsningen vil da gi deg et svar som du kan stole på at er korrekt (fordi brukeren ikke kan påvirke hva betalingsløsningen svarer).

Aller helst så bør du bruke en database hvor du kan lagre dataene dine. Siden du allerede kan å lage pålogging, så antar jeg at du er kjent med det å opprette databaser med brukere også. Du lager deg en tabell til som holder rede på hvilke brukere som har tilgang til hvilke filmer, med et timestamp for når tilgangen går ut. Det kan se slik ut:

Table users:
id | timestamp | username | password

Table access:
id | timestamp | userid | productid | expires

Table products:
id | timestamp | title | filename

Tabellen users holder på alle brukerne dine. "id" er en int med auto_increment og primary key. "timestamp" er UNIX_TIMESTAMP(), og denne viser deg bare når brukeren ble opprettet. "username" er brukernavnet og "password" er passord-hashen til brukeren.

Tabellen access holder på hvem som har tilgang til hvilke filmer (her kalt produkter - du kan jo i fremtiden leie ut mer enn bare film). "id" og "timestamp" er det samme som i users; auto_increment og UNIX_TIMSTAMP(). Det er alltid lurt å holde track på når en rad ble satt inn, selv om du ikke umiddelbart ser behov for det. Det er vanskelig å legge til dette i etterkant, hvis du plutselig ser at du trenger det. "userid" er en foreign key som peker mot users.id (altså id-en for en brukerkonto). "productid" er en foreign key som peker mot products.id, som er id-en for en film. "expires" er et nytt unix timestamp, men denne genererer du i PHP-koden og setter det til tidspunktet hvor leien skal opphøre (5 dager frem i tid).

Tabellen products holder på filmene dine. "id" og "timestamp" er på nytt bare auto_increment og UNIX_TIMESTAMP(). "title" er tittelen på filmen, som vises til brukerne dine. "filename" er et unikt navn for hver film. Du KAN i teorien bruke "id"-kolonnen til dette, men det er veldig bad practice. Du vil heller bruke en tilfeldig hash av ett eller annet slag, fordi det gjør at brukere ikke kan gjette hvilke hasher som er gyldige. Se for deg at du hadde laget et sosial nettverk (Facebook) og alle profiler hadde vært åpne, og brukt auto_increment som ID-er. Alle brukere kunne da crawlet seg gjennom alle profiler fordi de vet at profilene identifiseres med tall i stigende rekkefølge. På samme måte, hvis noen skulle finne en måte å få tilgang til mappen med filmene dine i, så er det ikke særlig smart at filnavnene heter "1.mp4", "2.mp4" og "3.mp4". Ved å bruke tilfeldige hasher som filnavn så blir det veldig vanskelig å gjette hva filene egentlig heter.

Når brukerne dine er pålogget, så lister du opp alle products.title-rader du har, med en link til betalingsløsningen din. Her må du også angi hvilken bruker det er som betaler, og hva det er de betaler for (users.id og products.id). Når brukeren har betalt, så bruker du det callback-et du har fått fra betalingsløsningen hvor du kan sjekke at brukeren har betalt. Når dette er OK, så lagrer du en ny rad i access, hvor du fyller inn hvilken bruker det er (userid), hvilket produkt det er (productid), og når tilgangen skal utløpe (expires).

Deretter gir du brukeren en link til filmen ved å bruke products.id-feltet (ikke products.filename), så brukeren går inn på en side av typen "dinside.com/produkter/1". Denne siden sjekker om brukeren har tilgang til å se filmen med den angitte ID-en (1), ved å sjekke om access.expires har utgått eller ikke. Hvis alt er OK, så viser du en videospiller med filmen. Som URL for videospilleren så bruker du en lignende URL, for eksempel dinside.com/filmer/1". Dette peker mot et PHP-skript som på nytt sjekker om brukeren har tilgang til filmen (på samme måte som videospiller-siden gjør), og hvis alt er OK, så bruker du header()-funksjonen til å levere selve filmen (mp4-filen), som om man hadde åpnet filmen direkte.

Det du i tillegg må gjøre, som et helt grunnleggende sikkerhetstiltak, er å begrense lesetilgang i mappen hvor filmene ligger, slik at man ikke kan åpne filmene direkte. De fleste webservere vil da tillate lesetilgang fra PHP-skriptene dine (/filmer/1-fila), så den klarer å lese og levere filmen til brukerne som faktisk har tilgang - men så snart tilgangen utløper er brukerne sperret ute.

Man kan fortsatt bruke en addon for å laste ned filmen, fordi innholdet streames til brukerens PC. Du "laster ned" alt du ser på internett uansett om du lagrer det på PC-en din eller ikke, så det er klin umulig å hindre piratkopiering av innhold på nett. Om du gir dem .mp4-linken direkte, så trenger brukerne bare å høyreklikke og velge "lagre som" for å laste ned filmen, og det er så enkelt at alle klarer å gjøre det. Å laste ned for eksempel YouTube-filmer krever bittelitt mer know-how. Ikke mye, men litt.

Hvis du trenger mer konkret informasjon så trenger vi å vite litt om hva slags webserver du bruker og hva slags database du har.
Hei Moff og takk for svar.

Ja, planen er å bruke paypal. Der tror jeg at jeg har funnet løsningen på hvordan jeg skal gå fram.
Det er dette med leietid og sette opp scriptet for leietid jeg er usikker på.

Har vært igjennom 2 bøker ang. php og sett flere undervisningsfilmer uten å blitt så klok på akkurat dette problemet.

Jeg bruker hosten fastcomet.com og er fornøyd med de. Det er vell en vanlig MySQL database. Har ikke satt meg så mye inn i om det finnes mange fler typer :P
Limited edition
Moff's Avatar
Selve leietiden regner du ut slik:

Kode

$days = 5;
$expires = time() + (60 * 60 * 24 * $days);
Unix timestamps er en veldig hendig måte å beregne tid på. time() gir deg nåværende unix timestamp for serverens tidssone. Dette er et tall med antall sekunder som har passert siden 1. januar 1970. Ved å plusse på 60 x 60 x 24 x antall dager du vil ha, så får du et timestamp som er satt et gitt antall dager frem i tid. Det er jo snakk om sekunder, så dette regnestykket gir deg et antall dager angitt som sekunder.

Når du skal sjekke om leien er utgått, så sjekker du om $expires er større enn time(). Hvis den er større, så er $expires lengre frem i tid enn nåværende tidspunkt. Hvis time() er større enn $expires, så har leien utgått fordi nåværende tidspunkt er lengre frem i tid enn $expires.
Takk skal du ha Moff
Skal sjekke dette ut og lese meg litt opp på time()