Terve
Kyselisin vain, että jokin nettisivuston tiedosto tai kansio suojataan niin, että sen voi ladata vain kun käyttäjä on kirjautuneena sisään tai vaihtoehtoisesti niin, että latauslinkin mukana pitäisi olla myös varmistuskoodi.
Hoituuko tuo ihan php:llä vai pitääkö sorkkia jotain muutakin?
Laitat tiedostot jonnekin salaiseen hakemistoon ja teet skriptin - esim. download.php - joka lukee tiedoston ja lähettää sen käyttäjälle. Tätä varten on olemassa funktio readfile().
Muuten joo, mutta jos tämä linkki sitten lähtee leviämään, niin se antaa lataukset sitten kaikille. Tarkoitus olisi, että vain sivustolle rekisteröityneet käyttäjät saavat ladata tiedostoja.
Sitten tietenkin kirjoitat download.php:n alkuun if-lauseen, joka tarkistaa, että käyttäjä on kirjautuneena.
Entä jos sen tiedoston alkuperäinen osoite lähtee leviämään? Käsittääkseni on kuitenkin mahdollista selvittää, mistä se download.php sen tiedoston oikeasti lataa?
Esimerkiksi joillakin nettisivuilla kun yritän avata suoraan jotain tiedostoa (vaikkapa peli.exe), ja jos en ole kirjautuneena, sivusto herjaa siitä.
Laita ladattavien tiedostojen kansioon .htaccess salasanasuojaus.
Silloin download.php pääsee lukemaan ladattavan tiedoston, mutta käyttäjä ei, jos ei tiedä .htaccess -salasanaa.
EDIT: Tämä siis toimii vain Apache -palvelimessa.
Tämä tuli ensimmäisenä mieleen, saattaa tähän olla joku parempikin keino.
Funktio readfile tulostaa halutun tiedoston sisällön sivulle. Tiedoston alkuperäistä nimeä tai sijaintia ei ole mahdollista päätellä.
Esimerkiksi jos tiedoston salainen.txt sisältönä on teksti ABC, seuraavat kaksi koodia tuottavat täysin saman tuloksen:
<?php readfile("salainen.txt"); ?>
<?php echo "ABC"; ?>
Käyttäjä ei siis voi tietää lopputuloksesta edes, onko sivun sisältö haettu jostain tiedostosta vai onko se tulostettu suoraan PHP:llä.
Kiitoksia neuvoista :)
Mietin vielä, että jos salainen tiedosto onkin jokin muu kuin tekstitiedosto (vaikka nyt peli.exe), niin miten tuo readfile osaa sitten sen lähettää käyttäjälle?
EDIT: No joo, taisinkin löytää vastauksen itse:
https://www.php.net/manual/en/function.readfile.
Aihe on jo aika vanha, joten et voi enää vastata siihen.