Gå til innhold

Hindre fil-nedlastning hvis ikke innlogget?


Anbefalte innlegg

Hei!

 

Jeg lurer på hvordan jeg kan hindre folk i å laste ned spesifikke filer hvis de ikke er innlogget på siden. Jeg vet hvordan jeg kan lage et login-system og hindre folk fra å komme inn på spesifikke sider, men ikke filer. Anyone?

Lenke til kommentar
Videoannonse
Annonse

Databaser skal ikke brukes til å lagre filer.

Men du kan derimot bruker databasen til å lagre hvor bildene ligger.

 

ID | Filbane | Nedlastinger
----------------------------------
1 | /filer/we.mp3 | 0

 

Så lager du et script, feks download.php. Denne mottar ID'en til saken som skal nedlastes

 

<?php

/*
* Mysql connect and such
*/
     
$id = mysql_real_escape_string( intval( $id ) );

if( !empty( $id ) )
{
     $q = "SELECT filbane FROM filer WHERE id={$id}";
     $res = mysql_query( $q ) or die( mysql_error() );

     $r = mysql_fetch_assoc( $res );

     // Så oppdaterer vi nedlastinger i DB

     mysql_query( "UPDATE filer SET nedlastiner=nedlastinger+1" )
                 or die( mysql_error() );


     /*
      * Noen header() som gjør at $r['filbane'] lastes ned
      */
}
else
{
     header( "Location: index.php" );
}

?>

Endret av M4rTiN
Lenke til kommentar

Slik kan du la brukeren laste ned en fil fra serveren som er beskyttet med 'deny from all' i .htaccess. "Umulig" å komme forbi, selv om man vet hvor filen ligger lagret.

 

PHP
<?php

 

if ($user->is_logged_in) {

 

// Disse linjene må være med

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");

 

// denne bør du endre til rett type for filen som skal nedlastes.

header('Content-Type: application/zip');

 

// filename="barebra.zip" kan droppes, med denne kan du gi

// filen som sendes til brukeren hvilket navn som helst,

// og lagre den med ett kryptisk filnavn på serveren

header('Content-Disposition: attachment; filename="barebra.zip"');

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

 

// Content-Length kan droppes, men da vet ikke

// nettleseren hvor mye som skal lastes ned eller hvor

// lang tid som gjenstår

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

$fp fopen("files/secret.zip","r");

fpassthru($fp);

fclose($fp);

 

}

else {

die("Du har ikke tilgang til filen");

}

 

?>

 

merk at denne metoden ikke egner seg for større filer, da scriptet kræsjer hvis nedlastingen tar lengre tid enn max_execution_time...

Endret av ventle
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...